通过这个查询。
{: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。_
应该作为通配符使用,可以匹配任何东西,所以第二个查询至少应该返回与第一个查询相同数量的结果,甚至可能更多。
谢谢...
对于这个例子,查询的逻辑结构基本上是正确的,但是属性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。