如何编写查询以使 cardinality/many 的键的结果成为映射而不是数据脚本中的向量
How to write query to make result of a key with cardinality/many be a map while not a vector in datascript
假设一个数据脚本数据库有一个模式:
(def schema {:maker/cars {:db/cardinality :db.cardinality/many
:db/valueType :db.type/ref}})
(def conn (d/create-conn schema)
并插入了一些实体:
{:db/id 1
:car/name "x"}
{:db/id 2
:car/name "y"}
{:db/id 3
:car/name "z"}
{:db/id 4
:maker/name "Honda"
:maker/cars [1 2 3]}
然后查询
(d/q '[:find [(pull ?e [:maker/name {:maker/cars [:car/name]}])]
:where [?e :maker/name "Honda"]] @conn)
会得到结果:
[#:maker{:name "Honda",
:cars [#:car{:name "x"} #:car{:name "y"} #:car{:name "z"}]}]
:maker/cars
是一个向量。
如何编写拉取查询以获得如下结果?
[#:maker{:name "Honda",
:cars {1 #:car{:name "x"}
2 #:car{:name "y"}
3 #:car{:name "z"}}]
尝试过但运气不好...
没办法。控制数据 Pull API returns 形状的选项不多。只需对 DataScript returns
的结果执行您自己的 post-processing
假设一个数据脚本数据库有一个模式:
(def schema {:maker/cars {:db/cardinality :db.cardinality/many
:db/valueType :db.type/ref}})
(def conn (d/create-conn schema)
并插入了一些实体:
{:db/id 1
:car/name "x"}
{:db/id 2
:car/name "y"}
{:db/id 3
:car/name "z"}
{:db/id 4
:maker/name "Honda"
:maker/cars [1 2 3]}
然后查询
(d/q '[:find [(pull ?e [:maker/name {:maker/cars [:car/name]}])]
:where [?e :maker/name "Honda"]] @conn)
会得到结果:
[#:maker{:name "Honda",
:cars [#:car{:name "x"} #:car{:name "y"} #:car{:name "z"}]}]
:maker/cars
是一个向量。
如何编写拉取查询以获得如下结果?
[#:maker{:name "Honda",
:cars {1 #:car{:name "x"}
2 #:car{:name "y"}
3 #:car{:name "z"}}]
尝试过但运气不好...
没办法。控制数据 Pull API returns 形状的选项不多。只需对 DataScript returns
的结果执行您自己的 post-processing