2014-11-25 3 views
2

В настоящее время я разрабатываю сервер node.js с MongoDB в качестве системы баз данных.Автоматическое обновление свойства объекта mongoose documents (node.js) через определенное время

Я знаю, что есть TTL (Time To Live) и «expires» для mongodb для удаления документов через определенное время. Моя проблема в том, что я не хочу удалять документы, я просто хочу установить их «неактивными».

Итак, есть ли что-то подобное, чтобы установить свойство через определенное время документа, например логическое значение isActive от true до false?

Есть ли общие подходы MongoDB или node.js для этого?

Спасибо!

ответ

2

В MongoDB нет триггеров с задержкой по времени, чтобы автоматически запускать такое действие.

Функция TTL просто запускает задание каждую минуту, которая проверяет даты (в индексе) и определяет, что нужно удалить. Для вашего приложения вы можете создать нечто подобное.

Добавить индексированное поле даты, названное, например: inactiveAfter.

Запуск задания каждую минуту (или какой-либо другой период, зависит от размера вашего db), который обновляет документы ({$set: {status:"inactive", inactiveAfter: null}}), срок действия которых истек. По соображениям производительности убедитесь, что запрос нужно только коснуться индекса (ов). Не забудьте установить {multi: true}.

Планирование работы можно по-разному, но простой cronjob выполнит эту работу. Я поставил бы эту задачу в отдельный проект, кроме сервера основного узла.