2012-02-22 19 views
24

¿Cómo apuntar a un subdocumento en la matriz authors como se muestra a continuación, para actualizarlo?¿Está actualizando un subdocumento en mongodb?

collection.update({'_id': "4f44af6a024342300e000001"}, {$set: { 'authors.?' }}) 

El documento:

{ 
    _id:  "4f44af6a024342300e000001", 
    title: "A book", 
    created: "2012-02-22T14:12:51.305Z" 
    authors: [{"_id":"4f44af6a024342300e000002"}] 
} 

Respuesta

37

Al especificar la posición real del documento incrustado como esto:

// update _id field of first author  
collection.update({'_id': "4f44af6a024342300e000001"}, 
        {$set: { 'authors.0._id': "1" }}) 

O vía positional operator:

// update _id field of first matched by _id author  
collection.update({'_id': "4f44af6a024342300e000001", 
        //you should specify query for embedded document 
        'authors._id' : "4f44af6a024342300e000002" }, 
    // you can update only one nested document matched by query     
        {$set: { 'authors.$._id': "1" }}) 
+2

hay una manera de actualizar todos ¿documento de documento anidado? – BlaShadow

+0

Solo una nota, si desea actualizar más que el primer documento coincidente en la colección, asegúrese de agregar {multi: true} como el tercer parámetro para collection.update – dev

+0

¿Esto insertará un nuevo subdocumento si no sale? ? – Pila

Cuestiones relacionadas