MongoDB предоставляет метод update() для обновления документов коллекции. Чтобы обновить только определенные документы, вам нужно добавить условие в оператор обновления, чтобы обновлялись только выбранные документы.

В этой статье мы поймем, как обновить документ в MongoDB, используя метод update (), метод save (), метод updateOne () и метод updateMany () с примерами для каждого. Мы также рассмотрим различия между каждым из этих методов.

Обновление отдельного документа

Синтаксис: db.collection.update(запрос, обновление, параметры)

  1. Используйте метод обновления
  2. Укажите условие, которое будет использоваться для обновления документа. В приведенном ниже примере нам нужно обновить документ, в котором идентификатор сотрудника равен 100.
  3. Используйте оператор $set для обновления значений
  4. Выберите имя поля, которое необходимо обновить, и введите новые значения соответственно –
Employee_Name =”Daniel Morales”
db.Employees.update(
{"Emp_ID" :100},
{$set:{"Employee_Name" :"Daniel Morales"}});
WriteResult({"nMatched": 1,  "nUpserted: 0, "nModified":1 })

Обновление нескольких документов

Синтаксис: db.collection.update(запрос, обновление, параметры)

Для одновременного обновления нескольких документов в MongoDB нам нужно использовать параметр multi, иначе по умолчанию одновременно обновляется только один документ.

В приведенном ниже примере показано, как обновить множество документов. В этом примере мы сначала найдем документ с идентификатором Emp_ID равным «1», а затем изменим Emp_ID с 1 на 21 и Employee_Name на «Нандан Кумар».

  1. Используйте метод обновления
  2. Укажите условие, которое следует использовать для обновления документа. В приведенном ниже примере нам нужно обновить документ, в котором идентификатор сотрудника равен 1.
  3. Используйте оператор $set для обновления значений
  4. Выберите имена полей, которые необходимо обновить, и введите новые значения соответственно.
Employee_Name =”Nandan Kumar”
Emp_ID = 21
db.Employees.update({ Emp_ID : 1},{$set :{"Employee_Name" : "Nandan Kumar"," Emp_ID" : 21}})

Метод сохранения () MongoDB

Метод db.collection.save() используется для обновления существующего документа или вставки нового документа.

Синтаксис: db.collection.save()

db.Employees.save( {Emp_ID : 21000 , Employee_Name : "Anshu", Salary:20000 } ); 
WriteResult({“ nInserted" : 1 })

Метод save() возвращает объект WriteResult, который содержит статус операции вставки или обновления.

Во время вставки оболочка создаст поле _id с уникальным значением ObjectId, что подтверждается вставленным документом:

db.Employees.find();
{"_id" : ObjectId("5da78973835b2f1c75347a83"),"Emp_ID" : 21000 , "Employee_Name" : "Anshu", "Salary":20000 }

В приведенном ниже примере метод save() выполняет вставку, поскольку документ, переданный методу, не содержит поля _id, поэтому он создает новый документ.

Примечание. Если документ не содержит поля _id, метод save() вызывает метод insert().

db.Employees.save({_id:2400, Emp_ID : 21000 , Employee_Name : "Anshu", Salary:20000 } ); 
WriteResult({"nMatched": 0,  "nUpserted: 1, "nModified":0,”_id”:2400})

Метод save() выполняет обновление с upsert: true, так как документ содержит поле _id:

db.Employees.save({_id:2400, Emp_ID : 21000 , Employee_Name : "Anshu", Salary:20000 } ); 
WriteResult({"nMatched": 1,  "nUpserted: 1, "nModified":0 })

Примечание –

Если документ уже содержит поле _id, то метод save() эквивалентен обновлению с параметром upsert, установленным в true, и предикатом запроса для поля _id.

Обновление одного и нескольких значений в документах MongoDB с помощью методов -updateOne, updateManyс примерами:

Метод MongoDB updateOne()

Этот метод обновляет один документ в коллекции, соответствующий фильтру или условию.

Синтаксис

Синтаксис метода updateOne () —

db.collection.updateOne(<filter>, <update>)

Пример

> db.Employees.updateOne(
{First_Name: 'Nandan'},
{ $set: { Age: '30',e_mail: '[email protected]'}}
)
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 0 }

Метод MongoDB updateMany()

Метод updateMany() обновляет все документы в коллекции на основе фильтра или условия.

Синтаксис:

Синтаксис метода updateMany () —

db.collection.updateMany(<filter>, <update>)

Пример

>db.Employees.updateMany( 
{Age:{ $gt:"25"}}, 
{ $set:{Age:'12'}} 
) 
{"acknowledged":true,"matchedCount":2,"modifiedCount":2}

Используя команду find, вы можете получить содержимое документов:

> db.Employees.find() 
{ "_id" : ObjectId("6fd6636870fb13eec3963bf5"), "First_Name" : "Nandan", "Last_Name" : "Kumar", "Age" : "12", "e_mail" : "[email protected]", "phone" : "8000012345
{ "_id" : ObjectId("6fd6636870fb13eec3963bf6"), "First_Name" : "Chris", "Last_Name" : "Goel", "Age" : "12", "e_mail" : "[email protected]", "phone" : "8000054321" } 
{ "_id" : ObjectId("6fd6636870fb13eec3963bf7"), "First_Name" : "Praveen", "Last_Name" : "Sharma", "Age" : "21", "e_mail" : "[email protected]", "phone" : "9000011111" }

Что делать, если операция обновления не соответствует документам в коллекции?

Если операция обновления не соответствует ни одному документу в коллекции, она может автоматически вставить в коллекцию новый документ, соответствующий запросу на обновление, установив для параметра upsert значение true.

db.Employees.update(
{type:"FullTime"},
{$set:{salary:20000}},
{upsert : true}
)

WriteResult ({"nMatched": 0, "nUpserted: 1, "nModified": 1})

Вы также можете увидеть, как upsert отражается в результате записи вышеуказанной операции.

Операция upsert в MongoDB используется для сохранения документов в коллекцию.

Если документ соответствует критериям запроса, он выполнит операцию обновления или вставит новый документ в коллекцию.

Разница между db.collection.update() , db.collection.update One() и db.collection.update Many()

Разница в том, что update() по умолчанию изменяет только один документ на основе указанного фильтра. Однако пользователь может изменить все документы, добавив модификатор {multi: true}.

Эта команда работает как команда updateOne и updateMany.

db.Employees.update (
   { "joinYear ": "2020" },
   {
     $set: { "bonusEligiblity": "False" },
   }
)

Здесь он обновит только первый документ, соответствующий условию.

db.Employees.update (
   { "joinYear ": "2020" },
   {
     $set: { "bonusEligiblity": "False" },
   },
{ multi: true } // Additional Parameter
)

Здесь добавление параметра — multi: true работает как updateMany() и обновляет все документы, соответствующие условию.

db.collection.updateOne() → метод для обновления только одного документа в коллекции.

db.Employees.update (
   { "joinYear ": "2020" },
   {
     $set: { "bonusEligiblity": "False" }, // Here multiple parameters can also be updated  
   }
)

Эти команды обновления используют joinDate = 2020 в качестве фильтра (соответствующего запросу) в коллекции «Сотрудники». Оператор $set (называемый оператором обновления) обновляет значение BonusEligiblity до False.

Вы также можете обновить несколько параметров, но они должны быть разделены запятой (,). Например.

$set: { "bonusEligiblity": "False" , “emp_status : ”New”},

db.collection.updateMany() → метод для обновления нескольких документов в коллекции, соответствующих указанному условию

db.Employees.updateMany(
   { "joinYear": "2020" },
  {
$set: { "bonusEligiblity": "False" },
  }
)

Здесь ВСЕ документы, имеющие joinYear = 2020, обновляются до Bonus Eligiblity = «False».

Что делать, если операция обновления не соответствует документам в коллекции?

Если операция обновления не соответствует ни одному документу в коллекции, она может автоматически вставить в коллекцию новый документ, соответствующий запросу на обновление, установив для параметра upsert значение true.

db.Employees.update( 
    {type:"FullTime"}, 
    {$set:{salary:20000}}, 
    {upsert : true} 
 )

WriteResult({"nMatched": 0, "nUpserted: 1, "nModified": 1 })

Вы также можете увидеть, как upsert отражается в WriteResult вышеуказанной операции.

Операция upsert в MongoDB используется для сохранения документов в коллекцию.

Если документ соответствует критериям запроса, он выполнит операцию обновления или вставит новый документ в коллекцию.
upsert также частично обновляет объект в MongoDB, так что новый объект будет накладываться или сливаться с существующим. .

Вкратце, upsert также используется для обновления документа содержимым другого документа, но обновляет только отсутствующие поля и полностью игнорирует поля, которые уже установлены.

Вывод

Подводя итог, у MongoDB есть методы: update() и save(), которые используются для обновления документов в коллекцию. Метод update() обновляет значения в существующем документе, тогда как метод save() используется для вставки нового документа или обновления существующего документа, если он уже содержит поле _id Параметры в методе document.update() являются условием для которого документ необходимо обновить, а следующей является операция обновления, которую необходимо выполнить.

db.collection.update(запрос, обновление, параметры)

В этой статье мы рассмотрели методы update(), save(), updateOne() и updateMany() с примерами для каждого из них. Мы также изучили функцию upsert.

Надеюсь, это было полезно. Курс MongoDB познакомит вас с популярной базой данных NoSQL и вооружит вас необходимыми навыками, чтобы начать использовать Mongo для поддержки вашего программного приложения. Удачного кодирования!

Ваш универсальный магазин для MongoDB находится всего в одном клике. Получите доступ к нашему интерактивному обучению в режиме реального времени и найдите простые решения для всех ваших вопросов здесь.

Нандан Кумар (автор)

QA Automation Architect с более чем 12-летним опытом тестирования пользовательского интерфейса, бэкэнда и баз данных (Selenium, Cucumber, Gherkins, Protractor, TestNG), обладающий сильными навыками программирования на Python/Java. Большой опыт работы с Devops/QAops, MongoDB и сертифицированным архитектором решений AWS.

Сильный решатель проблем, работавший в нескольких областях: медиа и ТВ / потоковое видео, инвестиционно-банковские услуги, электронная коммерция / платежи и облачная безопасность / сеть / SaaS / IaaS / PaaS.