【问题标题】:Datomic query with wildcard for partial string带有通配符的部分字符串的 Datomic 查询
【发布时间】:2018-10-11 18:46:43
【问题描述】:

所以,我不是数据库专家或开发人员,我是网络和系统管理员。我们有一个人离开了,我正在努力做到这一点。我觉得它应该非常简单,就像在 SQL 中一样,所以我一定遗漏了一些东西。

我正在从 datomic 控制台运行查询,我只想返回具有相似值的实体。我的大脑将此等同于在文档等中搜索时使用通配符。

有效的示例查询:

[:查找 ?e :在哪里 [?e:项目/名称“3000gtVR4”] ]

所以当项目名称已知时,这很完美......我得到了我期望的实体 ID 值。但是如果我想看看数据库中是否有类似的项目名称,但我不知道它到底是什么... 3000gt* 或 *VR4 或类似的东西在许多程序中都可以工作,但我找不到在 Datomic 中工作的类似值

[:查找 ?e :在哪里 [?e:项目/名称“3000gt*”] ]

NoGo...我已经尝试了大约一百种变体,老实说,我正在阅读的很多 Datomic 内容都超出了我的经验。我觉得这不应该需要一些大量的查询和定义变量等......

您也可以使用 Clojure 语法进行回复,我可能能够充分理解它以通过 REPL 会话将其粉碎,但请理解我在这里超出了我的领域。

【问题讨论】:

    标签: wildcard datomic


    【解决方案1】:

    Datomic query是Datalog的扩展形式,与传统SQL有着不同的概念。

    试试:

    [:find [?e ...] :where [?e :project/name ?name] [(重新匹配#"3000gt.+" ?name)]]

    [?e ...] 返回实体集合。

    [(re-matches #"3000gt.+" ?name)] 使用 clojure 函数作为谓词。 这是一个很好的教程https://docs.datomic.com/on-prem/query.html

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 2016-08-15
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多