2012-05-23 16 views
8

A continuación se muestra un documento de ejemplo.Cómo encontrar y modificar un valor en una matriz anidada

{ 
     "_id" : ..., 
     "inprogress" : true, 
     "name" : "Biz report", 
"inviteCode" : [ 
     { 
       "key" : "4fbd2b4b265a3", 
       "status" : "1" 
     }, 
     { 
       "key" : "4fbd2b4b265b5", 
       "status" : "1" 
     }, 
     { 
       "key" : "4fbd2b4b265b9", 
       "status" : "1" 
     }, 
     { 
       "key" : "4fbd2b4b265bc", 
       "status" : "1" 
     }, 
     { 
       "key" : "4fbd2b4b265c0", 
       "status" : "1" 
     } 
] 
    } 

De acuerdo con el documento, que se puede utilizar un objeto modificador como argumento de actualización, pero parece que un argumento actualización no incluye un filtro en el campo de brujas Quiero actualizar. Solo puedo usar $set:{name:"xxx"} pero no puedo especificar qué elemento actualizar en una matriz anidada. ¿Cómo configuro el "estado" archivado de la columna inviteCode donde la clave es "4fbd2b4b265a3"?

Respuesta

11

Usted puede utilizar el operador $ posicional: http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

En su caso:

db.collection.update({ inviteCode: { $elemMatch: { key: "4fbd2b4b265a3" } } }, 
    { $set: { 'inviteCode.$.status': '2' } }) 

El '$' es efectivamente una variable cuyo valor se establece en el índice del primer partido de la matriz .

+0

me costó bastante encontrar esta respuesta. ¡Gracias! – zVictor

Cuestiones relacionadas