Кто-нибудь использует Datomic, чтобы получить структуру и сущности отдельно? - PullRequest
0 голосов
/ 18 октября 2018

Поэтому я использую 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}]}]}

Можно ли это сделать на уровне запроса?Или мне нужно пройтись по структуре после возврата запроса и изменить его?В настоящее время я рад пройтись по структуре, мне просто интересно, разработал ли кто-нибудь лучший подход?

...