Option Параметр expireAfterSeconds поддерживается только в поле _ts. 」Ошибка показана - PullRequest
0 голосов
/ 08 января 2020

Я использую Cosmos db для магазина sesseion в node.js. И версия Cosmos db - 3.6.

Я выполняю следующий код.

const expressSession = require("express-session");
const MongoStore = require("connect-mongo")(expressSession);
const store = new MongoStore({
        mongooseConnection: mongoose.connection,
        ttl:24 * 60 * 60 * 1000,
})

В результате отображается следующее сообщение.

  (node:16068) UnhandledPromiseRejectionWarning: MongoError: The 'expireAfterSeconds' option is supported on '_ts' field only.

Какое решение этой проблемы

1 Ответ

3 голосов
/ 08 января 2020

CosmosDB - это реализация сервера, отличная от MongoDB, и некоторые функции и поведение отличаются.

В настоящее время Cosmos поддерживает индексы TTL только для поля Cosmos ' внутренней модификации времени _ts:

_ts - поле Cosmos DB-speci c, которое недоступно для клиентов MongoDB. Это зарезервированное (системное) свойство, которое содержит метку времени последней модификации документа.

Поскольку connect-mongo использует поле с именем expires для значения ttl, оно не будет работать с Cosmos по умолчанию.

Однако вы можете обойти это, используя режим совместимости *1020* , который использует менее эффективный подход на основе таймера в приложении Node вместо собственного TTL Индекс, поддерживаемый серверами MongoDB:

const store = new MongoStore({
        mongooseConnection: mongoose.connection,
        ttl:24 * 60 * 60 * 1000,
        autoRemove: 'interval',
        autoRemoveInterval: 10 // Value in minutes (default is 10)
})

Вы можете настроить интервал таймера с помощью опции autoRemoveInterval, которая устанавливает частоту выполнения запроса для удаления просроченных документов.

...