В 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 — удобный инструмент для автоматического обновления полей с датами и временем при изменении документов. Его использование повышает удобство работы с данными и отслеживания истории изменений. Рекомендуется использовать этот оператор для поддержания актуальности информации о дате создания и последнего обновления документов.