clojure - 使用 Datomic 返回 Map 而不是 Vector 时出错

标签 clojure datomic

我正在使用 Clojure 在 Datomic 中进行一些查询,如果我不尝试在查询中返回带有“:keys”关键字的 Map,我会尝试返回带有键的 Map 而不是 Vector工作正常。

我尝试在 :find 和 :key 之间使用相同和不同的名称。 如果我删除下面的 :keys 行,它就可以正常工作。

我正在使用 [org.clojure/clojure "1.10.0"] 和 [com.datomic/client-pro "0.8.28"]。

(def get-links
        '[:find ?e ?url ?description ?createdat ?order ?postedby
          :keys e url description createdat order postedby
          :in $ ?filter ?skip ?skip-plus-first
          :where [?e :link/url  ?url]
                  [?e :link/description ?description]
                  [?e :link/createdat ?createdat]
                  [?e :link/postedby ?e2]
                  [?e :link/order ?order]
                  [?e2 :user/name ?postedby]
                  [(.contains ?url ?filter)]
                  [(> ?order ?skip) ]
                  [(<= ?order ?skip-plus-first)]])

这是我的称呼:

(d/q get-links db filter skip (+ first skip))

确切的错误是: datomic.client.api.async/ares (async.clj:56) 处执行错误 (ExceptionInfo)。

“:find 中的参数 :keys 不是变量”

以下是 Datomic 文档中的示例。

[:find ?artist-name ?release-name
 :keys artist release
 :where [?release :release/name ?release-name]
 [?release :release/artists ?artist]
 [?artist :artist/name ?artist-name]]

最佳答案

我认为您使用的是旧版本的客户端,尚不支持 :keys 选项。

关于clojure - 使用 Datomic 返回 Map 而不是 Vector 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58209981/

相关文章:

list - 如何在 Clojure 中将 '( ' (...) '(...) ... ) 转换为 [...] [...] ... ]?

datomic - 数据数据库的第一次查询

clojure - 如何帮助Clojure理解0是最小的自然数?

scala - Scala 并发模型上下文中的 Clojure future

datomic - 在数据查询中使用数据库函数

clojure - 在结果元组中检索实体 ID 时,Datomic 未返回正确的 "min"结果

clojure - Datomic: `:db.error/tempid-not-an-entity` tempid 仅用作交易中的值

clojure - 从循环中返回一个值

clojure - 在将符号传递给 Clojure 中的宏之前,是否可以将符号解析为其值?

clojure - 在 Clojurescript Dommy 中隐藏元素