Я пытаюсь создать индекс TTL для удаления документов старше 30 минут в поле «сгенерировано» для приведенного ниже образца документа.
образец документа: {"_id": ObjectId ("5850308c077b3d1ccc11cef0"), "created": NumberLong ("1481650316760")}
Вопрос 1) возможно ли это сделать, поскольку поле «сгенерированное» не является типом даты 2) Есть ли альтернативный способ добиться этого без изменения структуры документа
возможно ли это сделать, поскольку поле "сгенерировано" не является типом даты
Как и в MongoDB 3.4, Индексы TTL поддерживаются только поля со значениями даты BSON:
If the indexed field in a document is not a date or an array that holds
date values, the document will not expire.
Есть ли альтернативный способ добиться этого без изменения структуры документа
Если вы хотите поддерживать срок действия документов на основе типов полей или сравнений за пределами того, что предусмотрено во встроенном индексе TTL, вы всегда можете написать свой собственный сценарий и запланировать его, используя что-то вроде cron
утилита (Операционные системы Linux / Unix) или Диспетчер задач (Windows).
В этом случае ваш сценарий удалит все документы, в которых generated
Значение NumberLong старше, чем желаемый срок действия (например, 30 минут). Запрос в mongo
оболочка будет похожа на:
db.collection.remove(
{
generated: {
// Expire documents older than half hour: 30 minutes * 60 seconds * 1000 ms
$lt: (Date.now() - (30 * 60 * 1000))
}
}
)
Вы можете написать это на своем любимом языке приложения, передать его как .js
файл в mongo
shell или передать код JavaScript в mongo
оболочка с использованием --eval
. Для получения дополнительной информации см. Написание скриптов для оболочки mongo в руководстве MongoDB.