给出这样的查询:
(def query '[:find ?tx ?date ?v ?op
:in $ ?e ?a
:where
[?e ?a ?v ?tx ?op]
[?tx :db/txInstant ?date]])
如果实体和属性是用户提供的,我可以创建一个功能,我可以在每个字段的基础上拥有审核日志。这很好用。
我的问题是枚举字段。返回的?v
是:db/id
,而不是枚举值本身,我不确定我应该如何弄清楚用户提供的字段是枚举字段而我应该将返回的Long
值视为对枚举的引用。
我认为我需要做的是让查询返回相关属性的:db/valueType
,然后如果它是ref
类型,则查找它指向的实体。但我不确定这是正确的方法,甚至不知道如何做到这一点。
答案 0 :(得分:2)
我得到了这个工作。我注意到在datomic中有一个(d/attribute db atto-key)
函数,它将返回有关该属性的元数据字段。我可以使用它来检查:db/valueType
是否等于:db/ref
,然后调用(d/ident db entity-id)
将实体ID解析为其枚举值。