2012-11-20 11 views
8

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

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

+2

質問は少し曖昧です。もう少し詳細を教えていただけますか? – Eric

+0

http://stackoverflow.com/questions/8245538/mongodb-id-cannot-be-an-array – 42n4

+3

私はこのリンクがこの質問と関係がないとは思わない。 – Sammaye

答えて

16

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

は、私が想定しています。この質問のための構造の

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

タイプ。

これは良い方法ですか?

通常ではありません。 _idはエンティティの一意の識別子です。したがって、副文書オブジェクト内に_idを追加する場合は、データを正常に正規化していない可能性があり、スキーマ設計内に根本的な欠陥がある可能性があります。

サブ文書は、その文書の繰り返しデータ、つまり住所やユーザーなどを含むように設計されています。

これは、_idと言っているが、必ずしも悪いことではありません。私がアドレスで述べた例を考えてみましょう。あなたがショッピングカートシステムを持っていて、何らかの理由で注文書にアドレスを複製しなかったとしたら、サブ文書を取り出すために_idまたは他の識別子を使用するとします。

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

インデックス作成に問題はありますか?それは、より小さく、よりユニークなIDを超える考慮すべき何かがあるかどうか、サブ文書のためにすべての_idを使用して

ObjectIdはまだかなりかなり大きいです。

インデックスの場合、実際には文書の標準_idフィールドとは異なる動作をしません。フィールド全体の一意のインデックスはコレクション全体で機能するはずです(シナリオに依存し、クエリをテストします)。

NB:MongoDBはサブ文書に_idを追加しません。

+0

@aioobe私はこのケースではい私は正規化を意味すると思う、それは非常に古い答えですが、私は彼が正規化されるエンティティを非常にうまく分離しないことを意味したと信じています。 – Sammaye

+0

@aioobeありがとう – Sammaye

+0

サブドキュメントにmongodbオブジェクト_idを作成すると、_idはコレクション全体で自動的に一意ですか? – Saitama

関連する問題