2010-09-30 13 views
24

W MongoDB w jaki sposób używasz $set do aktualizacji zagnieżdżonej wartości?

Na przykład, rozważmy zbiór ludzie z następującym dokumentem:

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

Jak zaktualizować pole street osadzony w dokumencie address z "123" do "Main Street"?

Odpowiedz

42

Używanie dot notation:

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

Czy to działa, nawet jeśli adres nie istnieje? Wiem, że $ set utworzy ulicę, jeśli nie istnieje na adres, ale jakie jest zachowanie, jeśli nie istnieją właściwości przodków? Twój link wymaga również logowania. – Tom

+2

@Tom, dzięki za heads-up o link, naprawiłem to. Aby odpowiedzieć na twoje pytanie: stworzy dla ciebie wymagane własności przodków, jeśli nie istnieją. –

+0

@Tom Tak, będzie. Spowoduje to utworzenie całego obiektu w dół do pola, które ustawiasz. (Późna odpowiedź, ale mam nadzieję, że jest to przydatne dla innych potykających się o to pytanie) – Nepoxx

1

Oprócz odpowiedzi Niels', czy też weryfikacji "typ" wartości zagnieżdżonego. W moim przypadku był to "sznur" utworzony z jsona. Chociaż może to być mało prawdopodobne, ale upewnij się, że wartość ma odpowiedni typ.

Powiązane problemy