MongoDB update: обновление документов, query и update

Метод update требует минимум два аргумента: запрос (query) и обновление (update). Без дополнительных параметров он найдет первый совпадающий документ, обновит его и остановится.

Результаты обновления

Сервер возвращает следующие результаты:

  • numberMatched: 1, numberModified: 1: Документ найден и успешно обновлен.
  • numberMatched: 1, numberModified: 0: Документ найден, но не изменен. Это происходит, если устанавливается значение поля, которое уже имеет это значение.
  • numberMatched: 0, numberModified: 0: Запрос не вернул документов, изменений нет.

Надежный код должен корректно интерпретировать результаты. Дальнейшие примеры демонстрируются в оболочке MongoDB.

Практическое применение

Подключитесь к серверу MongoDB с коллекцией shoppingCart и убедитесь, что находитесь в базе данных myDB.

Обновим все документы, установив значение поля processed в false:

db.shoppingCart.update({}, {$set: {processed: false}})

Результат: numberMatched: 1, numberModified: 1.

Проверим с помощью find:

db.shoppingCart.find()

В первом документе появится поле processed: false. Другие документы не изменятся.

Обновление несуществующего документа и документа без изменений

Попробуем обновить несуществующий документ (например, с индексом 10):

db.shoppingCart.update({index: 10}, {$set: {processed: true}})

Результат: numberMatched: 0, так как документа с индексом 10 нет.

Теперь обновим документ с индексом 1, где processed: false уже установлено:

db.shoppingCart.update({index: 1}, {$set: {processed: false}})

Результат: numberMatched: 1, numberModified: 0. Документ найден, но изменений нет.

Резюме

Метод update по умолчанию обновляет только первый найденный документ. Если документ не найден, обновление не выполняется. В следующей части рассмотрим обновление нескольких документов.

Что будем искать? Например,программа