MongoDB: Обновление дат с $currentDate

В MongoDB при создании и обновлении документов полезно добавлять метки времени, указывающие дату создания и последнего изменения. Обычно это делается с помощью двух отдельных полей, например, created_at и updated_at. Поле created_at устанавливается при создании объекта, а updated_at изменяется при каждом обновлении документа. Значения этих полей обычно устанавливаются в текущую дату и время. Существует два способа установить такие даты: с помощью оператора $set и оператора $currentDate.

Использование оператора $currentDate

Синтаксис оператора $currentDate прост: $currentDate: { поле: true }. Пример:

db.collection.updateOne(
  { cartId: 325 },
  { $currentDate: { created_at: true } }
)

В этом примере для документа с cartId равным 325 поле created_at будет автоматически установлено в текущую дату MongoDB.

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

Рассмотрим добавление поля updated_at во все документы коллекции.

Шаг 1: Добавление поля updated_at в один документ с помощью $set

db.collection.updateOne(
  { index: 1 },
  { $set: { updated_at: new Date() } }
)

Результат выполнения: Modified count: 1. Проверка с помощью find: документ с index: 1 теперь содержит поле updated_at типа Date.

Шаг 2: Добавление поля updated_at в остальные документы с помощью $currentDate

db.collection.updateMany(
  { updated_at: { $exists: false } },
  { $currentDate: { updated_at: true } }
)

Результат выполнения: Modified count: 4 (число измененных документов может отличаться). Проверка с помощью find: теперь все документы имеют поле updated_at, установленное в текущую дату.

Шаг 3: Обновление поля updated_at при изменении документа

Обновим документ с cartId: 325, добавив элемент в корзину и обновив поле updated_at.

db.collection.updateOne(
  { cartId: 325 },
  {
    $set: { cart: [{ item: "item1" }] },
    $currentDate: { updated_at: true }
  }
)

Проверка с помощью find: поле updated_at обновлено, отражая время последнего изменения.

Работа с массивами

В предыдущем примере содержимое поля cart было заменено. Для добавления элемента в существующий массив эффективнее использовать оператор $push. Другие операторы для работы с массивами будут рассмотрены дополнительно.

Оператор $currentDate в MongoDB — удобный инструмент для автоматического обновления полей с датами и временем при изменении документов. Его использование повышает удобство работы с данными и отслеживания истории изменений. Рекомендуется использовать этот оператор для поддержания актуальности информации о дате создания и последнего обновления документов.

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