MongoDB Update() документ с пример
\
⚡ Умно обобщение
MongoDB Операциите с документи Update() променят съществуващи записи в колекция. Методът update() приема условие за избор на документи и модификатор, като например $set, за да промени стойностите на полетата, а опцията multi актуализира няколко съответстващи документа едновременно.
Основни актуализации на документи
MongoDB предоставя командата update() за актуализиране на документите на колекция. За да актуализирате само документите, които искате да актуализирате, можете да добавите критерий към изявлението за актуализиране, така че да се актуализират само избрани документи.
Основните параметри в командата са условието за кой документ трябва да се актуализира, а следващият е модификацията, която трябва да се извърши.
Следващият пример показва как може да се направи това.
Стъпка 1) Издайте командата за актуализиране
Стъпка 2) Изберете условието, което искате да използвате, за да решите кой документ трябва да бъде актуализиран. В нашия пример искаме да актуализираме документа, който има идентификатор на служител 22.
Стъпка 3) Използвайте командата set, за да промените името на полето
Стъпка 4) Изберете кое име на поле искате да промените и въведете новата стойност съответно.
db.Employee.update( {"Employeeid" : 1}, {$set: { "EmployeeName" : "NewMartin"}});
Ако командата е изпълнена успешно, ще се покаже следният изход
Изход:
Резултатът ясно показва, че един запис отговаря на условието и следователно стойността на съответното поле е променена.
MongoDB Актуализация Operaтори
Операторът $set е най-често срещаният начин за промяна на поле, но MongoDB предоставя няколко оператора за актуализиране за различни нужди. Поставяте ги във втория аргумент на update() заедно с или вместо $set:
- $set: Задава стойността на поле, създавайки полето, ако то не съществува.
- $unset: Премахва поле от документа изцяло.
- $ вкл.: Увеличава или намалява числово поле с дадена стойност.
- $mul: Умножава стойността на числово поле.
- $преименуване: Преименува поле на ново име.
- $push: Добавя стойност към поле от масив.
- $pull: Премахва съвпадащи стойности от поле на масив.
Всеки оператор е насочен само към полетата, които посочите, оставяйки останалата част от документа непроменена. Можете да комбинирате няколко оператора в едно извикване на update(), за да промените няколко полета едновременно, което поддържа актуализациите точни и избягва презаписването на данни, които искате да запазите.
Актуализиране на множество стойности
За да се гарантира, че множество/групови документи се актуализират едновременно в MongoDB трябва да използвате мулти опцията, защото в противен случай по подразбиране се променя само един документ наведнъж.
Следващият пример показва как да актуализирате много документи.
В този пример първо ще намерим документа, който има идентификатор на служител като „1“ и ще променим името на служителя от „Мартин“ на „Нов Мартин“
Стъпка 1) Издайте командата за актуализиране
Стъпка 2) Изберете условието, което искате да използвате, за да решите кой документ трябва да бъде актуализиран. В нашия пример искаме документът, който има идентификатор на служител „1“, да бъде актуализиран.
Стъпка 3) Изберете кои имена на полета искате да промените и въведете новата им стойност съответно.
db.Employee.update ( { Employeeid : 1 }, { $set : { "EmployeeName" : "NewMartin", "Employeeid" : 22 } } )
Ако командата е изпълнена успешно и ако изпълните "намирам" за търсене на документа с идентификатор на служител като 22, ще видите следния изход
Изход:
Резултатът ясно показва, че един запис отговаря на условието и следователно стойността на съответното поле е променена.
Как да прехвърлите документ в MongoDB
Upsert е комбинация от update и insert. Когато го активирате, MongoDB актуализира документа, който отговаря на условието, или вмъква нов документ, ако не е намерено съвпадение. Това е полезно, когато не сте сигурни дали вече съществува запис.
За да извършите upsert, добавете опцията upsert, зададена на true, като трети аргумент на update():
db.Employee.update( {Employeeid: 5}, {$set: {EmployeeName: "Sofia"}}, {upsert: true} )
Ето какво се случва:
- Ако съществува документ с Employeeid 5, MongoDB актуализира полето си „Име на служителя“.
- Ако такъв документ не съществува, MongoDB вмъква нов документ с Employeeid 5 и EmployeeName “Sofiда се".
Upserts са удобни за броячи, настройки и всеки работен процес, където искате да създадете запис при първото използване и да го актуализирате след това. В съвременния MongoDB, същото поведение е достъпно чрез updateOne() и updateMany() чрез подаване на {upsert: true} в опциите. Внимавайте с условието, защото широк филтър, комбиниран с upsert, може да създаде неочаквани документи.
updateOne() срещу updateMany() срещу replaceOne()
Методът update() вече е стара команда. MongoDB Шофьорите разделят поведението му на три по-ясни метода. Таблицата по-долу ги сравнява:
| Начин на доставка | Какво го прави | Засегнати документи |
|---|---|---|
| updateOne() | Прилага оператори за актуализиране към първия съответстващ документ | Един |
| updateMany() | Прилага оператори за актуализиране към всеки съответстващ документ | Много |
| replaceOne() | Заменя целия първи съответстващ документ с нов | Един |
Използвайте updateOne() за единична целенасочена промяна, updateMany() вместо старата опция multi и replaceOne(), когато искате да замените цял документ, вместо да редактирате полета. Тези методи връщат ясен резултат, показващ колко документа съвпадат и колко са били променени, което ги прави по-безопасни и по-лесни за дебъгване от update().



