2017-02-07 6 views
1

В mongodb операция записи, которая обновляет несколько документов, не является атомарной. Если есть 3 записи A, B, C, необходимо обновить.Есть ли mongodb найти и обновить по одному или найти все, а затем обновить все

ли MongoDB:

найти, обновить, найти B, обновление B, найти C, обновление C

или

найти A, B, C и сохранить в памяти, Foreach, обновление A, B, C?

ответ

0

Bulk Update поддерживается в MongoDB.

Пожалуйста, смотрите этот пример

db.mycollection.find() 
{ "_id" : 1, "name" : "A", "designation" : "developer", "company" : "XYZ" } 
{ "_id" : 2, "name" : "B", "designation" : "developer", "company" : "XYZ", "expe 
rience" : 2 } 
{ "_id" : 3, "name" : "C", "designation" : "developer", "company" : "XYZ", "expe 
rience" : 3 } 
{ "_id" : 4, "name" : "D", "designation" : "developer", "company" : "XYZ", "expe 
rience" : 5 } 
{ "_id" : 5, "name" : "E", "designation" : "Manager", "company" : "XYZ", "experi 
ence" : 10 } 
{ "_id" : 6, "name" : "F", "designation" : "Manager", "company" : "XYZ", "experi 
ence" : 10 } 
{ "_id" : 7, "name" : "G", "designation" : "Manager", "company" : "ABC", "experi 
ence" : 10 } 
{ "_id" : 8, "name" : "H", "designation" : "Developer", "company" : "ABC", "expe 
rience" : 5 } 
{ "_id" : 9, "name" : "I", "designation" : "Developer", "company" : "XYZ", "expe 
rience" : 5 } 

Я собираюсь сделать насыпные обновления на MyCollection на основе приведенных ниже критериев

XYZ компания, предоставляющего содействие своих членов, которые разработчики, испытывает опыт от 5 лет до старшего разработчика

Мои команды в оболочке Монго -

var bulk = db.mycollection.initializeUnorderedBulkOp(); 

bulk.find({ $and:[{company:"XYZ"}, {experience:5}] }).update({$set:{designation:" 
senior developer", comments:"Congrats you have been promoted to senior developer 
"}}); 

bulk.execute(); 

Монго Shell мы получим результат ниже после выполнения запроса

BulkWriteResult({ 
     "writeErrors" : [ ], 
     "writeConcernErrors" : [ ], 
     "nInserted" : 0, 
     "nUpserted" : 0, 
     "nMatched" : 2, 
     "nModified" : 2, 
     "nRemoved" : 0, 
     "upserted" : [ ] 
}) 

Два документа, где соответствие нашего состояния компании: «XYZ» и опыта работы: 5, и эти документы были обновлены (_id: 4, _id: 9)

db.mycollection.find() 

{ "_id" : 1, "name" : "A", "designation" : "developer", "company" : "XYZ" } 
{ "_id" : 2, "name" : "B", "designation" : "developer", "company" : "XYZ", "expe 
rience" : 2 } 
{ "_id" : 3, "name" : "C", "designation" : "developer", "company" : "XYZ", "expe 
rience" : 3 } 
{ "_id" : 4, "name" : "D", "designation" : "senior developer", "company" : "XYZ" 
, "experience" : 5, "comments" : "Congrats you have been promoted to senior deve 
loper" } 
{ "_id" : 5, "name" : "E", "designation" : "Manager", "company" : "XYZ", "experi 
ence" : 10 } 
{ "_id" : 6, "name" : "F", "designation" : "Manager", "company" : "XYZ", "experi 
ence" : 10 } 
{ "_id" : 7, "name" : "G", "designation" : "Manager", "company" : "ABC", "experi 
ence" : 10 } 
{ "_id" : 8, "name" : "H", "designation" : "Developer", "company" : "ABC", "expe 
rience" : 5 } 
{ "_id" : 9, "name" : "I", "designation" : "senior developer", "company" : "XYZ" 
, "experience" : 5, "comments" : "Congrats you have been promoted to senior deve 
loper" } 

Другие связанные интересные Ссылки:

What's the difference between findAndModify and update in MongoDB?

https://docs.mongodb.com/manual/reference/method/Bulk.find.update/

https://docs.mongodb.com/manual/reference/method/db.collection.findAndModify/

https://docs.mongodb.com/v3.2/reference/method/db.collection.findOneAndUpdate/

Надеется, что это помогает !!