MongoDB node.js: индекс создан без учета TTL

Я пытаюсь создать индекс с TTL, используя драйвер MongoDB для Node.js и сервер Mongo, размещенный в mLab.

Node version 9.3.0.
Driver version 3.0.0.rc0
mongod version: 3.4.10 (MMAPv1)

Код в node.js:

var processCollection;

async function init (options) {
  processCollection = await options.db.collection('processes');

  await processCollection.dropIndexes();
  await processCollection.createIndex(
    { 'modified': 1 },
    { expireAfterSeconds: 3600 }
  );
}

Результаты в БД:

db['system.indexes'].find()
{
  "v": 2,
  "key": {
    "modified": 1
  },
  "name": "modified_1",
  "ns": "e-consular.processes"
}

В результирующем индексе отсутствует опция expireAfterSeconds. Что я делаю не так?


person Lucas Neves    schedule 05.03.2018    source источник


Ответы (1)


Collection.createIndex не работает в версиях 3.0.0rc0 и 3.0.0 драйвера Node mongodb. Он будет игнорировать аргумент объекта параметров.

Это было исправлено в версии 3.0.1 драйвера. (Вы можете увидеть исправление здесь).

Обновите драйвер до последней версии (например, npm i [email protected]), и он должен работать должным образом.

person tfogo    schedule 07.03.2018
comment
Для тех, кто застрял со сломанными версиями драйвера, замена createIndex на ensureIndex является допустимым обходным путем. - person Lucas Neves; 08.03.2018