gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:31:33 32 4
gpt4 key购买 nike

我正在尝试通过 REST API 在 Datomic 中进行“外部连接”。来自 https://github.com/Datomic/day-of-datomic/blob/master/tutorial/social_news.clj我举了最后一个例子:

(defn maybe
"Returns the set of attr for e, or nil if e does not possess
any values for attr."
[db e attr]
(seq (map :a (d/datoms db :eavt e attr))))

;; find all users
(q '[:find ?e ?upvote
:where
[?e :user/email]
[(user/maybe $ ?e :user/upVotes) ?upvote]]
(db conn))

我将maybe函数插入到我的数据库中,可以这样查询:
[:find ?n ?v :in $ :where [?e ?a ?v] [?a :db/ident :db/fn] [?e :db/ident ?n]]

返回
:maybe  #db/fn{:code "(seq (map :a (d/datoms db :eavt e attr)))", :params [db e attr], :requires [], :imports [], :lang :clojure}

但是,我无法弄清楚如何在查询中调用该函数。我有一个 :data/user某些交易的属性,我想获取它所在位置的值。这是我试图运行的查询;我要 :maybe是上面定义的数据库函数。
[:find ?attr ?v ?when ?who :where
[17592186045423 ?a ?v ?tx true]
[?a :db/ident ?attr]
[(:maybe $ ?tx :data/user) ?who]
[?tx :db/txInstant ?when]]

我很确定我遗漏了一些非常明显的东西,但我已经坚持了一天了。谢谢你的帮助!

最佳答案

您需要使用 d/invoke。所以你的例子看起来像这样:

[:find ?attr ?v ?when ?who :where
[17592186045423 ?a ?v ?tx true]
[?a :db/ident ?attr]
[(d/invoke $ :maybe ?tx :data/user) ?who]
[?tx :db/txInstant ?when]]

关于datomic - 在数据查询中使用数据库函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12474116/

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