MongoDB — обновить документ

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}, то есть создаст новый документ, если ни один документ не соответствует запросу.

В настоящее время у нас нет документов в нашей коллекции producers. Давайте создадим один, используя метод save():

db.producers.save({ _id: 1, name: "Bob Rock" })

Результат:

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

Теперь, если мы запросим коллекцию producers, мы видим нашу недавно созданную запись:

db.producers.find()

Результат:

{ "_id" : 1, "name" : "Bob Rock" }

Оставьте первый комментарий

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*