2010-09-30 27 views
24

En MongoDB ¿cómo se usa $set para actualizar un valor anidado?

Por ejemplo, considere una colección personas con el siguiente documento:

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

¿Cómo se actualiza el campo street incrustada en el documento address"123"-"Main Street"?

Respuesta

42

Utilizando el dot notation:

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

¿Funciona esto incluso si la dirección no existe? Sé que $ set creará street si no existe en la dirección, pero ¿cuál es el comportamiento si las propiedades ancestrales no existen? Además, su enlace requiere un inicio de sesión. – Tom

+2

@Tom, gracias por el aviso sobre el enlace, lo he arreglado. Para responder a su pregunta: creará las propiedades ancestrales requeridas para usted si no existen. –

+0

@Tom Sí lo hará. Creará todo el objeto hasta el campo que está configurando. (Respuesta tardía, pero espero que esto sea útil para que otros tropiecen con esta pregunta) – Nepoxx

1

Además de la respuesta de Niels, también no verificar el "tipo" del valor anidado. En mi caso, fue una "cadena" formada a partir de json. Aunque esto podría ser poco probable, pero asegúrese de que el valor tenga el tipo correcto.

Cuestiones relacionadas