通过这个查询:
{: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.com/query.html http://docs.datomic.com/query.html) 对于“作为查询输入的属性”。
重构此查询的方法如下:
(let [db (d/db conn)]
(d/q '[:find ?e
:in $ ?id
:where [?e _ ?id]]
db (d/entid db :db.type/string)))
在这种情况下,我们在参数化查询的输入中手动将关键字 :db.type/string 解析为其实体 ID。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)