14

mongo配列のオブジェクトのプロパティとして_idを追加したいと思います。

これは良い習慣ですか?インデックス作成に問題はありますか?

4

1 に答える 1

21

mongo 配列内のオブジェクトのプロパティとして _id を追加したいと考えています。

私が想定し:

{
    g: [
        { _id: ObjectId(), property: '' },
        // next
    ]
}

この質問の構造のタイプ。

これは良い習慣ですか?

通常ではありません。_ids は、エンティティの一意の識別子です。そのため_id、サブドキュメント オブジェクト内に追加しようとしている場合、データが十分に正規化されていない可能性があり、スキーマ設計の根本的な欠陥の兆候である可能性があります。

サブドキュメントは、そのドキュメントの繰り返しデータ、つまりアドレスやユーザーなどを含むように設計されています。

そうは言っ_idても、追加することは必ずしも悪いことではありません。先ほど住所で述べた例を見てみましょう。ショッピング カート システムがあり、(何らかの理由で) 住所を注文ドキュメントに複製しなかった場合、_idまたはその他の識別子を使用してそのサブドキュメントを取得するとします。

また、ドキュメントのリンクも考慮する必要があります。それが_id別のドキュメントを記述し、プロパティがそのリンクされたドキュメントに関連するそのドキュメントのカスタム属性である場合、それも問題ありません。

索引付けに問題はありますか?

Anはまだかなり大きいので、小さくて一意性の低い ID を使用するか、サブドキュメントにObjectIdan をまったく使用しないことを考慮する必要があります。_id

_idインデックスの場合、ドキュメント自体の標準フィールドとまったく同じように機能し、フィールド全体の一意のインデックスはコレクション全体で機能するはずです (シナリオに応じて、クエリをテストしてください)。

注意: MongoDB は_idサブドキュメントに を追加しません。

于 2012-11-20T13:41:23.303 に答える