是否有人使用Datomic分别获取结构和实体?

时间:2018-10-18 16:49:13

标签: clojure datomic

因此,我使用queries过滤数据,然后使用pull从Datomic数据库中获取信息。

(def rules
 [[[search ?txt ?id] [(fulltext $ :artist/name ?txt) [[?id]]]]
  [[search ?txt ?id] [(fulltext $ :track/name ?txt) [[?id]]]]])

(d/q
'[:find [(pull ?id [* {:track/artists [:db/id :track/name] :track/_artists [:db/id :artist/name] }]) ...]
  :in $ % ?query
  :where [search ?query ?id]]
 db rules "John Lennon")

有时这些查询可以递归,例如,我可以将pull更改为:

(d/q
'[:find [(pull ?id [* {:track/artists [:db/id :track/name] :track/_artists [* {:track/artists [:db/id :track/name]}]}]) ...]
  :in $ % ?query
  :where [search ?query ?id]]
 db rules "John Lennon")

现在我想做的是确保唯一实体与:db/id结构一起返回,因为我不想尽可能多地返回重复数据。

例如:(结果被...省略)

{:entities [{:db/id 1 :track/name "..." ...} {:db/id 2 :track/name "..." ...} {:db/id 3 :artist/name "..." ...}]
 :structure [{:db/id 1 :track/artists [{:db/id 3}]} {:db/id 2 :track/artists [{:db/id 3}]}]}

这可以在查询级别完成吗?还是在查询返回并修改它之后需要遍历结构?我很高兴能在目前的架构上走下去,我只是想知道是否有人找到了更好的方法?

0 个答案:

没有答案