Използвайте update() метод или save() метод за актуализиране на документи в MongoDB.
В MongoDB и двата update() метод и save() методът може да се използва за актуализиране на документ.
update() методът актуализира стойностите в съществуващ документ или документи, докато save() метод заменя документ с документа, подаден като параметър.
Въпреки това, update() методът може също да замени целия документ, в зависимост от параметъра, който е прехвърлен.
update() Метод
Ето пример за update() метод.
Първо, нека изберем запис за актуализиране:
db.musicians.find({ _id: 6 }).pretty() Резултат:
{
"_id" : 6,
"name" : "Jeff Martin",
"instrument" : "Vocals",
"born" : 1969
}
Джеф всъщност прави много повече от просто да пее. Така че нека добавим още някои инструменти. Ще използваме $set оператор за актуализиране на едно поле.
db.musicians.update(
{ _id: 6 },
{ $set:{ instrument : [ "Vocals", "Guitar", "Sitar" ] } }
) Резултат:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Сега, ако направим друга заявка, виждаме, че документът е актуализиран, както е посочено:
db.musicians.find({ _id: 6 }).pretty() Резултат:
{
"_id" : 6,
"name" : "Jeff Martin",
"instrument" : [
"Vocals",
"Guitar",
"Sitar"
],
"born" : 1969
}
Още няколко опции:
- Ако полето не съществува,
$setоператорът ще добави ново поле с посочената стойност, при условие че новото поле не нарушава ограничение за тип. - Можете също да използвате
{ upsert: true }за създаване на нов документ, когато нито един документ не съответства на заявката. - Можете да използвате
{ multi: true }за да актуализирате множество документи, които отговарят на критериите за заявка. По подразбиране тази опция е настроена наfalse, така че само един документ се актуализира, ако не го зададете наtrue.
save() Метод
save() методът е кръстоска между update() и insert() . Когато използвате save() метод, ако документът съществува, той ще бъде актуализиран. Ако не съществува, ще бъде създаден.
Ако не посочите _id поле, MongoDB ще създаде документ с _id който съдържа ObjectId стойност (съгласно insert() ).
Ако посочите _id поле, той извършва актуализация с { upsert: true } , което означава, че създава нов документ, ако нито един документ не съответства на заявката.
В момента нямаме документи в нашите
производители
колекция. Нека създадем такъв с помощта на save() метод:
db.producers.save({ _id: 1, name: "Bob Rock" }) Резултат:
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 1 })
Сега, ако търсим производители колекция, виждаме новосъздадения ни запис:
db.producers.find()
Резултат:
{ "_id" : 1, "name" : "Bob Rock" }