2015-08-05 2 views
4

В образце данных mbrainz: artist/type - это перечисление. Можно ли вывести значение перечисления из: db/ident и связать его как значение ключа: artist/type с помощью синтаксиса pull?Возможно получить значение перечисления через синтаксис Datomic pull?

Это так близко, как я мог бы получить:

[:find (pull ?e [:artist/name {:artist/type [:db/ident]}]) 
:where 
[?e :artist/name "Ray Charles"] 
] 

;;=> [[{:artist/name "Ray Charles", :artist/type {:db/ident :artist.type/person}}]] 

Можно ли использовать синтаксис тянуть, чтобы изменить результат в чем-то вроде этого?

;;=> [[{:artist/name "Ray Charles", :artist/type :artist.type/person}]] 

ответ

1

Я не думаю, что вы можете сделать это, используя Pull API так, как вы ищите. Вы можете обнаружить, что проще использовать Tupelo Datomic библиотеку:

(require '[tupelo.datomic :as td] 
     '[tupelo.core :refer [spyx]]) 
(let [x1  (td/query-scalar :let  [$ db-val] 
           :find [ ?e ] 
           :where [ [?e :artist/name "Ray Charles"] ]) 
     x2  (td/entity-map db-val x1) 
    ] 
    (spyx x1) 
    (spyx x2) 
) 

, который дает результат:

x1 => 17592186049074

x2 => {: художник/sortName «Чарльз, Ray ",: artist/name" Ray Charles ", : artist/type: artist.type/person,: artist/country: country/US, : artist/gid #uuid" 2ce02909-598b-44ef-a456-151ba0a3bd70 ", : artist/startDay 23,: artist/endDay 10,: artist/startYear 1930, : художник/endMonth 6,: художник/EndYear 2004: художник/StartMonth 9, : художник/пол: artist.gender/мужской}

Итак: художник/тип уже превращают в: дБ/значение идентификатора, и вы можете просто вытащить его из карты.

+0

упомянутая библиотека является мертвой ссылкой. – Kevin

+0

Исправлено, спасибо. –

Смежные вопросы