10

1 つのドキュメント内に (mongodb) 埋め込みドキュメントのリストがあり、既存のドキュメントのリストに新しい埋め込みドキュメントを追加することに関心があります。

私が調査した限り、$addToSet を使用できますが、MongoDB が埋め込みドキュメントのリストに新しいドキュメントが既に存在するかどうか、またはそれが新しいドキュメントであるかどうかをどのように判断するか、つまり、MongoDB がどのように判断するかはわかりません2 つの埋め込みドキュメントは同じですか?

ps私が持っている埋め込みドキュメントは単なる値ではなく、非常に複雑な構造であるため、2つの値が等しいことを定義できる場所があるかどうか疑問に思っていました...

4

1 に答える 1

15

$addToSet通常のmongodb 等式規則を使用します。値ごとの深い比較を行うため、次の 2 つのドキュメントは同一です。

{ name: "John", hobbies: ["coding", "drinking", "chess"] }
{ hobbies: ["coding", "drinking", "chess"], name: "John" }

(ドキュメント内の順序は保証されていないため、同一です)

それらはそうではありませんが(ペアワイズ):

// compare to:
{ name: "John", hobbies: ["chess", "coding", "drinking"] } 

// in arrays, the order matters:
{ name: "John", hobbies: ["coding", "drinking", "chess"] } 

// field names and values are case sensitive
{ Name: "John", hobbies: ["chess", "coding", "drinking"] } 
{ name: "john", hobbies: ["chess", "coding", "drinking"] } 

// additional field:
{ name: "John", lastName: "Doe", hobbies: ["chess", "coding", "drinking"] }

// missing field:
{ name: "John" }

ここには特別なフィールドはありません。フィールドを追加できますが_id、特別なセマンティクスはなく、他のフィールドと同じように扱われます。

于 2014-02-05T13:22:06.603 に答える