数据组查询:查找所有具有某个值的实体。

问题描述 投票:4回答:1

通过这个查询。

{:find  [?e]
         :where [[?e :db/valueType :db.type/string]]}

我可以找到所有属性为 :db/valueType 价值 :db.type/string. 在我的案例中,数据库中的一些数据会返回十个ID。

我如何搜索所有值为 :db.type/string,无论属性名称是什么?例如这个查询。

{:find  [?e]
         :where [[?e _ :db.type/string]]}

返回一个空集。据我所知,Datomic的Datalog。_ 应该作为通配符使用,可以匹配任何东西,所以第二个查询至少应该返回与第一个查询相同数量的结果,甚至可能更多。

谢谢...

clojure datomic datalog
1个回答
2
投票

对于这个例子,查询的逻辑结构基本上是正确的,但是属性ident关键字没有被解析为它的实体id。请注意,这是一种特殊情况,当你以属性作为输入进行查询时就会出现这种情况--在这种情况下,查询引擎不能保证执行这种转换。请参阅Datomic关于查询的文档 (http:/docs.datomic.comquery.html。)的 "属性作为查询输入"。

重组这个查询的方法是这样的。

    (let [db (d/db conn)] 
            (d/q '[:find ?e 
                   :in $ ?id 
                   :where [?e _ ?id]] 
             db (d/entid db :db.type/string)))

在这种情况下,我们将关键字:db.typestring 在参数化查询的输入中手动解析为实体id。

© www.soinside.com 2019 - 2024. All rights reserved.