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

Clojure 是否有人使用Datomic分别获取结构和实体?,clojure,datomic,Clojure,Datomic,因此,我使用查询过滤数据,然后使用拉取从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/_art

因此,我使用
查询
过滤数据,然后使用
拉取
从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}]}]}