MongoDB - Обновление значения индекса TTL - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь обновить значение даты истечения срока в документе. Вот код Node.js, который я использую для установки индекса каждый раз, когда я хочу обновить документ:

database.collection(collectionName).createIndex({ "expires_on": 1 }, { expireAfterSeconds: 0 })
database.collection(collectionName).updateOne(query, update, { upsert: true }, (error, result) => {...})

Дело в том, что я устанавливаю дату expires_on на дату завтрашнего дня, и значение устанавливается правильно в базы данных, но срок действия истекает через несколько секунд. Есть ли проблема с тем, как я обновляю это поле? Я не знаю, как я могу обновить этот документ таким образом, чтобы срок его действия истек в последнюю дату expires_on, для которой он был обновлен.

Я заметил, что вы не можете обновить индексы в MongoDB, но я Я обновляю индекс здесь? Разве это не отличается, когда я пытаюсь изменить значение, а не сам индекс?

1 Ответ

0 голосов
/ 29 апреля 2020

Вы поняли, что бит ttl index немного странный ... В вашем примере кода вы устанавливаете срок действия каждого документа, у которого есть столбец отметки времени "expires_on" (expireAfterSeconds: 0).

Процесс истечения срока действия выполняется в фоновом режиме и если вы установите expireAfterSeconds в 0, он обнаружит все документы, значение expires_on которых меньше или равно now ().

Итак, ваше обновление поля expires_on должно произойти в тот момент, когда «сейчас» () -lt expires_on ".

Лучше сказать, например «expireAfterSeconds: 3600», а затем обновите expires_on до значения «завтра минус 3600 секунд» ...

...