Използвайте 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" }