我在搞定拉动API方面遇到了一些麻烦.我有两个位置实体.当我使用拉力时我只收到一个. (ns some-ns.core (:require [datomic.api :as d]))(d/q '[:find ?e :where [?e :location/name]] db)= #{[17592186045535] [17592186
(ns some-ns.core (:require [datomic.api :as d])) (d/q '[:find ?e :where [?e :location/name]] db) => #{[17592186045535] [17592186045420]} ; two results (d/q '[:find [(pull ?e [:db/id :location/name])] :where [?e :location/name]] db) => [{:db/id 17592186045535, :location/name "Some Other Location"}] ; one result
我怀疑我可能正在使用不正确的拉动表达,但我没有看到任何明显的错误.
在您提供的示例中,您在pull表达式周围使用“单元组” find specification,它只返回单个元组,而不管查询匹配的实体数量.如果你在find中指定标量返回,你会遇到同样的问题,即…(1)最直接的解决方法是删除查找规范(这与原始查询的形式相符):
(d/q '[:find (pull ?e [:db/id :location/name]) :where [?e :location/name]] db)
(2)您也可以像在自己的答案中一样,在find中指定一个集合:
(d/q '[:find [(pull ?e [:db/id :location/name]) ...] :where [?e :location/name]] db)
主要区别在于(1)将返回一组嵌套映射,而(2)将返回映射向量.