Я был удивлен, обнаружив, что следующий пример кода обновляет только один документ:
> 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
Я знаю, что могу прокручивать и продолжать обновлять, пока они все не изменятся, но это кажется ужасно неэффективным. Есть ли способ лучше?
Начиная с v3.3 вы можете использовать updateMany
В версии 2.2 функция обновления принимает следующую форму:
https://docs.mongodb.com/manual/reference/method/db.collection.update/
источник
Для версии Mongo> 2.2 добавьте поле multi и установите для него значение true
db.Collection.update({query}, {$set: {field1: "f1", field2: "f2"}}, {multi: true })
источник
Я создал способ сделать это с помощью лучшего интерфейса.
db.collection.find({ ... }).update({ ... })
- мульти обновлениеdb.collection.find({ ... }).replace({ ... })
- разовая заменаdb.collection.find({ ... }).upsert({ ... })
- одиночный апсертdb.collection.find({ ... }).remove()
- множественное удалениеВы также можете применить ограничение, пропустить, отсортировать обновления и удалить, предварительно связав их.
Если вам интересно, посмотрите Mongo-Hacker
источник
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 :
В клиенте MongoDB введите:
db.Collection.updateMany({}, $set: {field1: 'field1', field2: 'field2'})
Новое в версии 3.2
Params ::
Аргумент ключевого слова
multi
не принятисточник
MongoDB найдет только один соответствующий документ, который соответствует критериям запроса, когда вы вводите команду обновления, какой бы документ ни совпадал первым, будет обновлен, даже если есть другие документы, соответствующие критериям, будут проигнорированы.
поэтому, чтобы преодолеть это, мы можем указать опцию «MULTI» в вашем операторе обновления, что означает обновление всех тех документов, которые соответствуют критериям запроса. сканировать все документы в коллекции, находя те, которые соответствуют критериям, и обновлять:
db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )
источник
Следующая команда может обновить несколько записей коллекции
db.collection.update({}, {$set:{"field" : "value"}}, { multi: true, upsert: false} )
источник
У меня была такая же проблема, и я нашел решение, и оно работает как шарм
просто установите для флага multi значение true, вот так:
db.Collection.update( {_id_receiver: id_receiver}, {$set: {is_showed: true}}, {multi: true} /* --> multiple update */ , function (err, updated) {...});
Надеюсь, это поможет :)
источник
Чтобы обновить всю коллекцию,
db.getCollection('collection_name').update({}, {$set: {"field1" : "value1", "field2" : "value2", "field3" : "value3"}}, {multi: true })
источник
Вы можете использовать.
Model.update({ 'type': "newuser" }, { $set: { email: "abc@gmail.com", phoneNumber:"0123456789" } }, { multi: true }, function(err, result) { console.log(result); console.log(err); }) `
источник
Все последние версии mongodb updateMany () работают нормально
db.getCollection('workers').updateMany({},{$set: {"assignedVehicleId" : "45680"}});
источник
Спасибо, что поделились этим, я использовал 2.6.7, и следующий запрос просто работал,
для всех документов:
db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:true})
для одного документа:
db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:false})
источник