Fiquei surpreso ao descobrir que o seguinte código de exemplo atualiza apenas um único documento:
> db.test.save({"_id":1, "foo":"bar"});
> db.test.save({"_id":2, "foo":"bar"});
> db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}});
> db.test.find({"test":"success!"}).count();
1
Eu sei que posso fazer um loop e continuar atualizando até que tudo mude, mas isso parece terrivelmente ineficiente. Existe uma maneira melhor?
A partir da v3.3 Você pode usar o updateMany
Na v2.2, a função de atualização assume o seguinte formato:
https://docs.mongodb.com/manual/reference/method/db.collection.update/
fonte
Para a versão Mongo> 2.2 , adicione um campo multi e defina-o como true
fonte
Eu criei uma maneira de fazer isso com uma interface melhor.
db.collection.find({ ... }).update({ ... })
- atualização múltipladb.collection.find({ ... }).replace({ ... })
- substituição únicadb.collection.find({ ... }).upsert({ ... })
- upsert únicodb.collection.find({ ... }).remove()
- remoção múltiplaVocê também pode aplicar limite, pular, classificar e atualizar as atualizações, encadeando-as com antecedência.
Se você estiver interessado, confira o Mongo-Hacker
fonte
db.userActivity.find({ 'appId' : 1234, 'status' : 1}).update({ $set: { 'status': 1 } }); 2017-06-05T17:47:10.038+0530 E QUERY [thread1] TypeError: db.userActivity.find(...).update is not a function :
No cliente MongoDB, digite:
Novo na versão 3.2
Params ::
Argumento de palavra-chave
multi
não utilizadofonte
O MongoDB encontrará apenas um documento correspondente que corresponda aos critérios de consulta quando você estiver emitindo um comando de atualização, o documento que corresponder primeiro for atualizado, mesmo que haja mais documentos que correspondam aos critérios que serão ignorados.
para superar isso, podemos especificar a opção "MULTI" em sua declaração de atualização, o que significa atualizar todos os documentos que correspondem aos critérios de consulta. procure todos os documentos na coleção, encontrando aqueles que correspondem aos critérios e atualize:
fonte
O comando a seguir pode atualizar vários registros de uma coleção
fonte
Eu tive o mesmo problema e encontrei a solução, e funciona como um encanto
basta definir o sinalizador multi para true como este:
espero que ajude :)
fonte
Para atualizar a coleção inteira,
fonte
Você pode usar.`
fonte
Todas as versões mais recentes do mongodb updateMany () estão funcionando bem
fonte
Obrigado por compartilhar isso, eu usei com o 2.6.7 e a consulta a seguir funcionou,
para todos os documentos:
para documento único:
fonte