2

以下は、簡略化されたdatomicセットアップを使用しています。

: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それが試行錯誤のない有効な鍵であることをどうやって見つけるのでしょうか?

4

2 に答える 2

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>))
于 2013-03-26T16:43:21.397 に答える
0

次のクエリを試してください(テストされていません)。

(q '[:find ?attrs
     :in $ ?e
     :where [_ ?attrs ?e]]
    my-db my-entity)
于 2013-04-05T18:36:12.053 に答える