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

Error returning a Map instead of a Vector using Datomic

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

我试图在 :find 和 :keys 之间使用相同和不同的名称。 如果我删除下面的 :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)

"Argument :keys in :find is not a variable"

下面是 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 选项的旧版本客户端。