2012-05-22 655 views
5

Me gustaría realizar varias actualizaciones en el campo de "valor" de subdocumentos si los campos "oid" y "instancia" coinciden. puedo hacerlo uno subdocumento a la vez, pero hay una manera de hacerlo por múltiplesSubdocumento de actualización múltiple

- Esto funciona para uno -

db.myTable.update({ "data" : { "$elemMatch" : { "oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3", 
               "instance" : "0" } }, 
        "$atomic" : "true" }, 
        { $set: { "data.$.value": "change good" }}, 
        false, 
        true); 



    "_id" : 483, 
    "data" : [{ 
     "oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3", 
     "instance" : "0", 
     "value" : "0" 
    }, { 
     "oid" : "1.3.6.1.4.1.111.3.999.2.5.2", 
     "instance" : "0", 
     "value" : "aaa" 
    }, { 
     "oid" : "1.3.6.1.4.1.111.3.30.5.1.1", 
     "instance" : "0", 
     "value" : "BBB" 
    }]} 
+0

Quizás podría utilizar el operador '$ or' aquí. –

+0

posible duplicado de [Cambiar todos mis documentos valor de documento anidado] (http://stackoverflow.com/questions/10662779/change-all-my-documents-nested-document-value) – istepaniuk

Respuesta

8

Esta pregunta se ha hecho un par de veces already, pero no, no puedes hacer esto de una vez. Para repetir la respuesta:

Tendrá que hacer esto por sí mismo en el código de aplicación, por consultar el documento y bucle sobre todos sus documentos anidados; y luego guárdelo de nuevo en MongoDB.

Con el fin de evitar condiciones de carrera con esto, por favor, echar un vistazo a la sección comparar y de intercambio en http://www.mongodb.org/display/DOCS/Atomic+Operations

En la actualidad existe un billete abierto para esto para añadir esta funcionalidad a MongoDB. Es posible que desee votar al alza: https://jira.mongodb.org/browse/SERVER-1243

+0

Bien vieja pregunta y respuesta y el mongodb jira ¡el boleto está cerrado de este año! Sin embargo, donde trabajo ejecutamos una versión anterior de mongo, así que escribí una prueba de concepto en node.js sobre cómo hacerlo iterativamente https://github.com/KATT/mongodb-deep-set – Alex

Cuestiones relacionadas