是否可以将通配符传递给_
参数化查询?像这样的东西:
(d/q [:find ?e
:in $ ?type
:where [?e :type ?type]] db _)
当我按照上面的方法尝试时,它抛出了一个错误。有没有办法做到这一点?
我知道我可以通过如下查询获得所有内容:
(d/q [:find ?e:where [?e:type]] db)
但我的目标是避免在我不想按:type
. 例如,用例是可能过滤或不过滤结果的 API 端点。
如果我理解正确,您应该可以输入:
(d/q [:find ?e
:in $
:where [?e :type]] db )
在 Datomic 中,任何未指定的值都被视为通配符。上面的查询将返回具有该:type
属性的所有实体的列表,无论值如何。
Datomic 的查询被设计为接受一个普通的值,比如5
或被:awesome
替换到?type
变量中。像_
(或引用的版本'_
)这样的符号不符合 Datomic 预期的模式。
只是为了好玩,我尝试了几种变体,但无法让 Datomic 以?type
您建议的方式接受变量的符号 '_。我认为您必须为通配符案例编写单独的查询。
本质上,通配符_
是 Datomic 查询语法中的一个特殊符号(也称为“保留字”),就像$
. ?
Datomic 还强制查询变量以like?e
或开头?type
。这些要求是您无法更改的 Datomic DSL 的一部分。
除了手写单独的查询之外,唯一的解决方法是从基本部分和附加部分动态组合查询向量。这是否比手写不同的查询更容易或更难取决于您的具体情况。