Разрешение просрочено, документ остался: чего не гарантирует TTL?
Разрешение просрочено, документ остался: чего не гарантирует TTL? TTL в MongoDB удаляет данные в фоне. Документ может ещё существовать после истечения срока. Поиск по ID поэтому не доказывает, что разрешение действует. Учебный пример для MongoDB 8.0: обычная отдельная коллекция permits_demo, чтение с primary. Вымышленный документ: { _id: "demo-permit", expiresAt: ISODate("2026-10-08T10:00:00Z") } expiresAt должен быть BSON Date. Индекс учебной коллекции: db.permits_demo.createIndex( { expiresAt: 1 }, { expireAfterSeconds: 0 } ); Проверка в 10:01 UTC: const now = ISODate("2026-10-08T10:01:00Z"); db.permits_demo.findOne({ _id: "demo-permit" }); // Ещё может вернуть документ. db.permits_demo.findOne({ _id: "demo-permit", expiresAt: { $gt: now } }); // Для этого документа ожидается null. В момент expiresAt разрешение уже недействительно. В приложении now берут из доверенных серверных часов при проверке, согласованных с источником срока; здесь время фиксировано для примера. Если документ остался, проверьте индекс, expireAfterSeconds и тип даты. При корректной настройке возможна задержка фоновой очистки, без гарантированного максимального срока. Проверяйте срок в логике приложения независимо от TTL. Права, отзыв разрешения и условия использования требуют отдельных проверок. Сохраните эту развилку для проектирования приложений и практических занятий по MongoDB. #MongoDB #Backend #УЦФОРС