MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

vários operadores de atualização do mongo em uma única instrução?


Várias atualizações podem ser realizadas no mesmo documento, desde que essas atualizações não entrem em conflito (daí o erro "have conflitantes mods in update").

Porque "$push" :{"bugs" :[{"name":"bug1", "count":1}]} e "$inc" :{"bugs.0.count" :1} estão ambos tentando modificar a mesma parte do documento (ou seja, o array "bugs"), eles entram em conflito.

Várias atualizações podem ser combinadas se cada uma afetar uma parte diferente do documento:

por exemplo:
> 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." }
> 

A atualização continha três operações diferentes ($pushAll, $inc e $set), mas foi concluída com êxito, pois cada operação afetou uma parte diferente do documento.

Sei que isso não é exatamente o que você esperava fazer, mas espero que isso forneça uma compreensão um pouco melhor de como as atualizações funcionam e talvez forneça algumas ideias de como suas atualizações e/ou documentos podem ser reestruturados para executar a funcionalidade que seu aplicação requer. Boa sorte.