gpt4 book ai didi

database - 是否可以将数据记录通配符 `_` 传递到参数化查询中?

转载 作者:搜寻专家 更新时间:2023-10-30 23:34:56 24 4
gpt4 key购买 nike

是否可以将通配符 _ 传递到参数化查询中?像这样:

(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com