cruxでクエリする
code:clojure
(crux/submit-tx
system
[[:crux.tx/put
{:crux.db/id :clojure.company/xcoo
:name "Xcoo"
:address "Hongo"}]
[:crux.tx/put
{:crux.db/id :clojure.company/toyokumo
:name "Toyokumo"
:address "Gotanda"}]])
クエリする
code:clojure
(crux/q (crux/db system)
:where e :address "Hongo"})
(crux/q (crux/db system)
:where e :address "Gotanda"})
crux.api/dbでdb valueを取得し、それに対してcrux.api/qでクエリをかける
db valueはスナップショトなので、db valueが同じであればクエリの結果が同じであることが保証される(大事なポイント)
:where
[<entity (:crux.db/id)> <attribute> <value>]の絞り込みとシンボルの束縛を指定する
[e :address "Hongo"]は :addressが"Hongo"にマッチするentitiyをシンボルeに束縛する、という指定になる
複数渡す→全てを満すものだけマッチする
範囲の指定もできる
:find -> マッチしたclauseのどの値を返して欲しいかをシンボルで指定する
例えば上記とは別の例で:clojure.company/xcooの:addressのvalueを返して欲しい場合は下記のように指定する
code:clojure
(crux/q (crux/db system)
:where :clojure.company/xcoo :address address})