2010-09-30 15 views
24

In MongoDB come si usa $set per aggiornare un valore nidificato?

Ad esempio, si consideri una collezione persone con il seguente documento:

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

Come posso aggiornare il campo street incorporato nel documento address"123"-"Main Street"?

risposta

42

Utilizzando la dot notation:

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

Funziona anche se l'indirizzo non esiste? So che $ set creerà street se non esiste all'indirizzo ma qual è il comportamento se le proprietà ancestrali non esistono? Inoltre, il tuo link richiede un login. – Tom

+2

@ Tom, grazie per i commenti sul collegamento, l'ho risolto. Per rispondere alla tua domanda: creerà le proprietà ancestrali richieste per te se non esistono. –

+0

@ Tom Sì, lo farà. Creerà l'intero oggetto fino al campo che stai impostando. (Risposta tardiva, ma spero che questo sia utile per gli altri che inciampano su questa domanda) – Nepoxx

1

Oltre alla risposta Niels', anche fare verificare il "tipo" di valore nidificato. Nel mio caso, era una "stringa" formata da JSON. Anche se questo potrebbe essere improbabile, ma assicurati che il valore abbia il tipo giusto.

Problemi correlati