Метод 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 по умолчанию обновляет только первый найденный документ. Если документ не найден, обновление не выполняется. В следующей части рассмотрим обновление нескольких документов.