MongoDB - Обновление документа

Здравствуйте, будущие маги баз данных! Сегодня мы окунаемся в захватывающий мир обновлений документов MongoDB. Как ваш добрый соседский учитель компьютера, я здесь, чтобы направить вас через это путешествие с множеством примеров и объяснений. Так что возьмите любимый напиток, устройтесь поудобнее, и отправляйтесь в это приключение с MongoDB вместе!

MongoDB - Update Document

Метод MongoDB update()

Давайте начнем с классического метода update(). Представьте, что у вас есть коллекция книг в вашей базе данных MongoDB, и вы хотите обновить цену определенной книги. Вот как это можно сделать:

db.books.update(
{ title: "Великий Гэтсби" },
{ $set: { price: 12.99 } }
)

В этом примере мы говорим MongoDB найти книгу с названием "Великий Гэтсби" и установить ее цену на 12.99. Это как пойти в书店 и наклеить новую ценовую бирку на конкретную книгу.

Но подождите, есть еще! Метод update() имеет несколько трюков в рукаве. Давайте рассмотрим более сложный пример:

db.books.update(
{ author: "Фрэнсис Скотт Фицджеральд" },
{ $inc: { copiesSold: 100 }, $set: { bestseller: true } },
{ multi: true }
)

Здесь мы увеличиваем значение поля 'copiesSold' на 100 и устанавливаем 'bestseller' в true для всех книг Фрэнсиса Скотта Фицджеральда. Опция 'multi: true' обеспечивает обновление всех соответствующих документов, а не только первого.

Метод MongoDB save()

Теперь давайте поговорим о методе save(). Этот метод как швейцарский армейский нож — он может как插入 новый документ, так и обновить существующий. Вот пример:

db.books.save(
{
_id: ObjectId("507f1f77bcf86cd799439011"),
title: "Убить пересмешника",
author: "Harper Lee",
year: 1960,
price: 10.99
}
)

Если документ с этим _id уже существует, он будет обновлен. Если нет, будет вставлен новый документ. Это как иметь магическую ручку, которая либо пишет новую запись в вашем библиотечном каталоге, либо обновляет существующую!

Метод MongoDB findOneAndUpdate()

Метод findOneAndUpdate() как детектив, который находит документ, обновляет его и затем отчитывается, возвращая либо исходный документ, либо обновленный. Давайте посмотрим, как он работает:

db.books.findOneAndUpdate(
{ title: "1984" },
{ $set: { genre: "Дистопическая фантастика" } },
{ new: true }
)

Этот метод находит книгу "1984", добавляет жанр и возвращает обновленный документ (из-за 'new: true'). Это как попросить библиотекаря найти книгу, добавить этикетку с жанром и показать вам обновленную книгу.

Метод MongoDB updateOne()

Метод updateOne() идеален, когда вы уверены, что хотите обновить только один документ. Вот как вы можете использовать его:

db.books.updateOne(
{ title: " Catcher in the Rye" },
{ $set: { status: "Занято" }, $inc: { timesCheckedOut: 1 } }
)

Этот метод обновляет статус " Catcher in the Rye" до "Занято" и увеличивает счетчик 'timesCheckedOut' на 1. Это как обновить статус одной книги в вашей библиотечной системе.

Метод MongoDB updateMany()

Наконец, у нас есть updateMany(). Этот метод великолепен, когда вам нужно внести изменения в несколько документов одновременно. Давайте рассмотрим пример:

db.books.updateMany(
{ year: { $lt: 1900 } },
{ $set: { category: "Классика" }, $inc: { specialEditionPrice: 5 } }
)

Эта операция находит все книги, изданные до 1900 года, относит их к категории "Классика" и увеличивает их цену специального издания на 5. Это как пройти через всю вашу библиотеку и обновить все старые книги сразу!

Теперь давайте подытожим все эти методы в удобной таблице:

Метод Описание Случай использования
update() Обновляет один документ или несколько документов Общий случай обновления
save() Вставляет новый документ или обновляет существующий Когда вы не уверены, существует ли документ
findOneAndUpdate() Находит документ, обновляет его и возвращает либо исходный, либо обновленный документ Когда вам нужно знать состояние документа до или после обновления
updateOne() Обновляет один документ Когда вы уверены, что хотите обновить только один документ
updateMany() Обновляет несколько документов Когда вам нужно внести изменения в несколько документов одновременно

Помните,年轻的 падаваны, обновление документов в MongoDB похоже на уход за садом. Вы должны быть осторожны и точны, но с этими инструментами в вашем распоряжении, вы можете прекрасно сформировать свои данные.

Заканчивая этот урок, я вспоминаю время, когда я случайно обновил все книги в моей базе данных, чтобы они были написаны "Анонимом". Мне потребовалось несколько часов, чтобы это исправить, но это научило меня важности точности в моих запросах. Всегда проверяйте свои условия перед нажатием на кнопку обновления!

Теперь, идите и обновляйте свои документы с уверенностью. Пусть ваши запросы будут точными, а обновления быстрыми!

Credits: Image by storyset