以下使用简化的数据组设置:
:account/user -> string
:account/email -> ref
:email/name -> string
:email/type -> keyword
如果我有包含帐户信息的实体,很容易知道它有电子邮件信息
(keys <account entity>)
;; => [:account/user :account/email]
(:account/email <account entity>)
;; => <email entity>
但另一方面,如果我查看电子邮件实体的密钥,我不知道它已将帐户信息关联起来。
(keys <email entity>)
;; => [:email/name :email/type]
(:account/_email <email entity>)
;; => <account entity>
如何在没有反复试验的情况下发现:account/_email
是有效密钥?
答案 0 :(得分:2)
要检查密钥是否有效,您可以使用:
(.containsKey <email entity> :account/_email)
;; => true
为了获得所有有效的实体密钥,包括反向的:
(.touch <email entity>)
(keys (.cache <email entity>))
请注意,直接在实体上调用的(keys)
仅返回正向键。
经过类似架构的测试。
旁注:除了
(:account/_email <email entity>)
您还可以查询以获取已链接指定电子邮件的帐户:
(q '[:find ?a :in $ ?e :where [?a :account/email ?e] ] (db conn) (:db/id <email entity>))
答案 1 :(得分:0)
尝试以下查询(未经测试):
(q '[:find ?attrs
:in $ ?e
:where [_ ?attrs ?e]]
my-db my-entity)