Можно ли избежать IndexOptionsConflict, чтобы изменить expiredAfterSeconds в индексе MongoDB? - PullRequest
0 голосов
/ 23 мая 2019

Я могу создать индекс с помощью expiredAfterSecconds таким образом в оболочке mongo:

db.x.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )

Я могу повторить ту же команду, и это нормально для mongo:

> db.x.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 2,
    "numIndexesAfter" : 2,
    "note" : "all indexes already exist",
    "ok" : 1
}

Однако, если я пытаюсь изменить значение expiredAfterSecconds, воссоздавая полученный индекс, я получаю сообщение об ошибке:

> db.x.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 7200 } )
{
    "ok" : 0,
    "errmsg" : "Index with name: createdAt_1 already exists with different options",
    "code" : 85,
    "codeName" : "IndexOptionsConflict"
}

То же самое, если я использую ensureIndex() вместо createIndex().

Насколько мне известно, единственный найденный мною способ изменения значения expireAfterSeconds - это сбросить индекс, а затем создать его заново, но мне интересно, есть ли другой способ (может быть, какая-то опция "переопределения" будет передана createIndex()?).

Я использую PyMongo, так что, если он сможет решить ограничения оболочки монго, мне тоже подойдет.

...