当前位置 : 主页 > 网络推广 > seo >

clojure – Datomic Pull API仅检索一个实体

来源:互联网 收集:自由互联 发布时间:2021-06-16
我在搞定拉动API方面遇到了一些麻烦.我有两个位置实体.当我使用拉力时我只收到一个. (ns some-ns.core (:require [datomic.api :as d]))(d/q '[:find ?e :where [?e :location/name]] db)= #{[17592186045535] [17592186
我在搞定拉动API方面遇到了一些麻烦.我有两个位置实体.当我使用拉力时我只收到一个.

(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)将返回映射向量.

网友评论