Проблема с настройкой mon go ttl в зависимости от часового пояса - PullRequest
0 голосов
/ 14 июля 2020

В настоящее время я очищаю данные в mongodb в начале следующего дня. т.е. 15 июля 2020 00:00:00 Данные удаляются из базы данных в зависимости от времени. Здесь я изо всех сил пытаюсь назначить правильное время для атрибута expiresAt для mongodb. Ниже приведен код, который я пытаюсь установить для mongodb

 const dateToString  = new Date().toLocaleString("en-US", { timeZone: "Europe/Helsinki" });
 const date = new Date(dateToString);
 date.setDate(date.getDate());
 date.setHours(0);
 date.setMinutes(0);
 date.setSeconds(0);
 date.setMilliseconds(0);

Ниже кода, я использовал для установки ttl:

this.connector.update(COLLECTION_NAME,
                                 { _id: id },
                                 { $set: { amount, expiresAt: date } },
                                 { upsert: true });

Если использовать приведенный выше код, он установит срок действия с 15 -07-2020 00:00:00. Требование - mongodb должен автоматически очищать документ в Finni sh время 12.00 следующего дня. Но поскольку сервер работает с временем UT C, это не работает должным образом. Я не понимаю, чего не понимаю.

Может ли кто-нибудь помочь мне найти решение той же проблемы? Момент готовности к использованию или javascript Дата собственности.

1 Ответ

0 голосов
/ 14 июля 2020

Текущее смещение Хельсинки (EEST - летнее время): UTC +3, что 3 hours, 180 mins или 10,800 seconds перед UT C.

Сохранение expiresAt как вы делаете 00:00:00, и поскольку mon go db сохранит это в UT C i: e на 3 часа позже.

Создать индекс TTL на expiresAt на 10 800 секунд после:

db.collection.createIndex( { "expiresAt": 1 }, { expireAfterSeconds: 10800 } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...