是否可以将通配符 _
传递到参数化查询中?像这样:
(d/q [:find ?e
:in $ ?type
:where [?e :type ?type]] db _)
当我尝试上面写的这个时,它抛出了一个错误。有办法做到这一点吗?
我知道我可以通过如下所示的查询获取所有内容:
(d/q [:找到 ?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 还强制查询变量以 ?
开头,例如 ?e
或 ?type
。这些要求是您无法更改的 Datomic DSL 的一部分。
除了手写单独的查询之外,唯一的解决方法是从基础部分和附加部分动态组合查询向量。这比手写不同的查询更容易还是更难取决于您的具体情况。
关于database - 是否可以将数据记录通配符 `_` 传递到参数化查询中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44276068/