2010-09-30 6 views
24

Dans MongoDB comment utilisez-vous $set pour mettre à jour une valeur imbriquée?

Par exemple, considérons une collection personnes avec le document suivant:

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

Comment puis-je mettre à jour le champ street intégré dans le document address"123"-"Main Street"?

Répondre

42

Utilisation du dot notation:

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

Est-ce que cela fonctionne même si l'adresse n'existe pas? Je sais que $ set créera la rue si elle n'existe pas sur l'adresse mais quel est le comportement si les propriétés ancestrales n'existent pas? En outre, votre lien nécessite une connexion. – Tom

+2

@Tom, merci pour le heads-up sur le lien, je l'ai réparé. Pour répondre à votre question: il va créer les propriétés ancestrales nécessaires pour vous si elles n'existent pas. –

+0

@Tom Oui, il le fera. Cela créera l'objet entier jusqu'au champ que vous définissez. (Réponse tardive, mais j'espère que cela sera utile aux autres qui trébuchent sur cette question) – Nepoxx

1

En plus de la réponse de Niels, ne vérifie également le "type" de la valeur imbriquée. Dans mon cas, c'était une "chaîne" formée à partir de json. Bien que cela puisse être improbable, mais assurez-vous que la valeur a le bon type.

Questions connexes