Étant donné une requête comme ceci:journal d'audit Datomic et énumérations
(def query '[:find ?tx ?date ?v ?op
:in $ ?e ?a
:where
[?e ?a ?v ?tx ?op]
[?tx :db/txInstant ?date]])
Lorsque l'entité et l'attribut sont utilisateur fourni, je peux faire une fonction où j'ai un journal d'audit sur une base par domaine. Cela fonctionne bien.
Mon problème concerne les champs enum. Le ?v
qui revient est un :db/id
, pas la valeur enum lui-même, et je ne suis pas vraiment sûr de la façon dont je suis supposé comprendre que le champ fourni par l'utilisateur était un champ enum et je devrais traiter la valeur Long
retournée comme référence à une énumération.
Je pense que ce que je dois faire est de rendre la requête retourner le :db/valueType
pour l'attribut en question, puis si c'est un type ref
rechercher l'entité vers laquelle il pointe. Mais je ne suis pas sûr si c'est la bonne approche, ou même comment le faire.
Vous pouvez également interroger l'attribut directement via une clause '[? A: db/valueType? Vtid] [? Vtid: db/ident? Vt]' –
Les attributs sont stockés et peuvent être interrogés comme toutes les autres entités - Ils sont Pas vraiment de méta-données. –