2014-02-05 11 views
6

Ich habe eine Liste von (mongodb) eingebetteten Dokumenten in einem Dokument und ich bin daran interessiert, ein neues eingebettetes Dokument zu der Liste der vorhandenen hinzuzufügen.

Soweit ich recherchiert habe, kann ich $ addToSet verwenden, was ich nicht herausfinden kann ist, wie MongoDB entscheidet, ob das neue Dokument bereits in der Liste der eingebetteten Dokumente existiert oder ob es ein neues ist, dh wie entscheidet MongoDB, ob 2 eingebettete Dokumente gleich sind?

p.s. die eingebetteten Dokumente, die ich habe, sind nicht nur Werte, sie sind ziemlich komplexe Strukturen, also habe ich mich gefragt, ob es einen Platz gibt, den ich definieren kann, was die Gleichheit zwischen 2 von ihnen bedeutet ...

Antwort

9

$addToSet verwendet die üblichen mongodb equality rules: es einen tiefen Wert-by-Wert-Vergleich tun wird, so dass die folgenden zwei Dokumente identisch sind:

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

(Bestellung innerhalb von Dokumenten is not guaranteed, sie sind also identisch)

während diejenigen, die nicht (paarweise) sind:

// 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" } 

Bitte beachten Sie, dass hier kein spezielles Feld vorhanden ist. Sie können ein Feld _id hinzufügen, aber es hat keine spezielle Semantik und wird wie jedes andere Feld behandelt.

+0

Vielen Dank für die umfassende Antwort! Aha! Es klingt eher wie ein Wörterbuchvergleich ... – Clara