私はREST APIを介してDatomicで '外部結合'を実行しようとしています。datomicクエリでデータベース関数を使用する
[: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}
をしかし、私は:私は多分、私のデータベースに機能し、そしてそれは、このように照会することができ、挿入
(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))
:https://github.com/Datomic/day-of-datomic/blob/master/tutorial/social_news.cljから私は最後の例をとっていますクエリで関数を呼び出す方法を理解できません。いくつかのトランザクションには: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を呼び出すデータベース以外の関数を定義し、単にクエリ内から呼び出すこともできます。あなたが良い名前を選ぶと、クエリをより読みやすくするかもしれません。 – Brian