MongoDB предоставляет метод update() для обновления документов коллекции. Чтобы обновить только определенные документы, вам нужно добавить условие в оператор обновления, чтобы обновлялись только выбранные документы.
В этой статье мы поймем, как обновить документ в MongoDB, используя метод update (), метод save (), метод updateOne () и метод updateMany () с примерами для каждого. Мы также рассмотрим различия между каждым из этих методов.
Обновление отдельного документа
Синтаксис: db.collection.update(запрос, обновление, параметры)
- Используйте метод обновления
- Укажите условие, которое будет использоваться для обновления документа. В приведенном ниже примере нам нужно обновить документ, в котором идентификатор сотрудника равен 100.
- Используйте оператор $set для обновления значений
- Выберите имя поля, которое необходимо обновить, и введите новые значения соответственно –
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.
- Используйте оператор $set для обновления значений
- Выберите имена полей, которые необходимо обновить, и введите новые значения соответственно.
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.