0

Java を使用することは重要ではありません。

問題があり、おそらくそれは単なる設計上の問題です。

「_id」フィールドを、埋め込まれたものも含め、すべてのドキュメントに割り当てます。ドキュメントが埋め込まれた親ドキュメント(およびそれらのコレクション)があります

だから私は次のようなものを持っています:

{ "_id" : "49902cde5162504500b45c2c" , 
  "name" : "MongoDB" , 
  "type" : "database" , 
  "count" : 1 , 
  "info" : { "_id" : "49902cde5162504500b45c2y", 
             "x" : 203 , 
             "y" : 102
           }
}

今、私は自分の「情報」を を介して参照する別のドキュメントを持ちDBRefたいのですが、コピーは必要ありません。そこで、DBRef親ドキュメントのコレクションを指し、_id を xxxx5c2y として指定する を作成します。ただし、 を呼び出すとfetch()NULLDBRefが返されます。

トップレベルのコレクションエントリ「_id」フィールドでのみ DBRef機能するということですか?fetch()

ドキュメントの中括弧内のすべてのキー:値を消費すると予想していfetch()ましたが、それはあまりにも多くのことを求めている可能性があります。誰か知っていますか??最上位レベル以外でドキュメント間の参照を作成する方法はありませんか?

ありがとう

4

1 に答える 1

1

はい、DBRef _id 参照は、埋め込みドキュメントではなく、コレクション内のドキュメントである必要があります。

埋め込みドキュメントを検索する場合は、クエリを実行する必要があり、そのドキュメントにinfo._idもインデックスを追加する必要があります (パフォーマンスのために)。または、その埋め込みドキュメントをコレクションに保存して埋め込みを処理する必要があります。コピーとして 1 つ。MongoDB ではコピーは問題ありません ... 「1 つの事実は 1 つの場所」はここでは適用されません ... 主なものが変更されたときにコピーを更新する何らかの方法がある場合 (結果整合性)。

ところで、DBRef の公式ガイダンスでは、「ほとんどの開発者は、コレクションがあるドキュメントから次のドキュメントに変更できる場合にのみ DBRef を使用します。参照されるコレクションが常に同じである場合は、上記の手動参照の方が効率的です。」

また、なぜinfo文書内で参照したいのですか? それが配列である場合、個々のエントリを参照したい理由を理解できましたが、例では配列ではないように見えるので、含まれているドキュメントを _id で参照するだけではどうですか?

于 2011-08-20T05:00:58.587 に答える