sql >> Base de Datos >  >> NoSQL >> MongoDB

operador de actualización mongo múltiple en una sola declaración?

Se pueden realizar varias actualizaciones en el mismo documento, siempre que esas actualizaciones no entren en conflicto (de ahí el error "tiene modificaciones en conflicto en la actualización").

Porque "$push" :{"bugs" :[{"name":"bug1", "count":1}]} y "$inc" :{"bugs.0.count" :1} ambos están intentando modificar la misma parte del documento (es decir, la matriz de "errores"), entran en conflicto.

Se pueden combinar varias actualizaciones si cada una afecta a una parte diferente del documento:

por ejemplo:

> db.test.drop()
true
> db.test.save({ "_id" : 1, "name" : "albert", "bugs" : [ ] })
> db.test.update({"name":"albert"}, {"$pushAll" : {"bugs" : [{"name":"bug1", "count":1}]}, "$inc" : {"increment" : 1}, $set:{"note":"Here is another field."}})
> db.test.find()
{ "_id" : 1, "bugs" : [ { "name" : "bug1", "count" : 1 } ], "increment" : 1, "name" : "albert", "note" : "Here is another field." }
> 

La actualización contenía tres operaciones diferentes ($pushAll, $inc y $set), pero pudo completarse correctamente porque cada operación afectaba a una parte diferente del documento.

Me doy cuenta de que esto no es exactamente lo que esperaba hacer, pero espero que le brinde una mejor comprensión de cómo funcionan las actualizaciones y tal vez le brinde algunas ideas sobre cómo se pueden reestructurar sus actualizaciones y/o documentos para realizar la funcionalidad que su requiere la aplicación. Buena suerte.