2010-09-30 14 views
24

In MongoDB wie verwenden Sie $set, um einen verschachtelten Wert zu aktualisieren?

Betrachten wir zum Beispiel eine Sammlung Menschen mit dem folgenden Dokument:

{ 
    _id: ObjectId("5a7e395e20a31e44e0e7e284"), 
    name: "foo", 
    address: { street: "123", town: "bar" } 
} 

Wie aktualisiere ich die street Feld in der "123"-"Main Street"address Dokument eingebettet?

Antwort

42

Mit der dot notation:

db.people.update({ }, { $set: { "address.street": "Main Street" } }) 
+3

Funktioniert das auch, wenn die Adresse nicht existiert? Ich weiß, $ set wird Straße erstellen, wenn es nicht auf Adresse existiert, aber was ist das Verhalten, wenn die Vorfahren Eigenschaften nicht existieren? Außerdem erfordert Ihr Link eine Anmeldung. – Tom

+2

@Tom, danke für das Heads-up über den Link, ich habe es behoben. Um Ihre Frage zu beantworten: Es erstellt die erforderlichen Vorfahreneigenschaften für Sie, wenn sie nicht existieren. –

+0

@Tom Ja wird es. Dadurch wird das gesamte Objekt bis auf das Feld, das Sie festlegen, erstellt. (Späte Antwort, aber hoffentlich ist das nützlich für andere, die auf diese Frage stolpern) – Nepoxx

1

Neben Niels' Antwort, auch die "Art" überprüfe des verschachtelten Wertes. In meinem Fall war es eine "Zeichenfolge", die aus json gebildet wurde. Dies ist zwar unwahrscheinlich, aber stellen Sie sicher, dass der Wert den richtigen Typ hat.

Verwandte Themen