2017-02-21 19 views
5

Команда db.testCollection.createIndex({ _id: 1 }, {name: "_id_2", unique: true, background: true}) не работает в версии 3.0.2, но не 3.2.11. Документация mongo указывает, что версия 3.4 поддерживает как атрибуты unique, так и background.mongodb 3.4.2 InvalidIndexSpecificationOption error: поле 'unique' недопустимо для спецификации индекса _id

Монго 3.4.2 не удается ...

> use testDB 
switched to db testDB 
> db.testCollection.createIndex({ _id: 1 }, {name: "_id_2", unique: true, background: true}) 
{ 
    "ok" : 0, 
    "errmsg" : "The field 'unique' is not valid for an _id index specification. Specification: { ns: \"testDB.testCollection\", v: 1, key: { _id: 1.0 }, name: \"_id_2\", unique: true, background: true }", 
    "code" : 197, 
    "codeName" : "InvalidIndexSpecificationOption" 
} 
> 

Монго 3.2.11 работы ...

> use testDB 
switched to db testDB 
> db.testCollection.createIndex({ _id: 1 }, {name: "_id_2", unique: true, background: true}) 
{ 
    "createdCollectionAutomatically" : false, 
    "numIndexesBefore" : 1, 
    "numIndexesAfter" : 1, 
    "note" : "all indexes already exist", 
    "ok" : 1 
} 
> 

Кто-нибудь знает работы вокруг?

Мы используем обертку Mongoose Node.js для создания индексов Mongo, поэтому не добавляем атрибуты unique и background.

Cheers!

Ed

ответ

2

Этот уникальный не проблема здесь .. Это что _id то, что уже есть индекс (создается автоматически) и вы не может создать второй индекс, что имеют точно такие же поля (_ID: 1), что первый один иметь.

Как насчет тестирования с каким-либо другим полем, чем _id, и вы обнаружите, что уникальный и фоновый возможности возможны, если в этом поле уже нет индекса.

+1

Спасибо J.Jussi, вот и все. Я не искал заметку из 3.2.11, которая указывала на избыточный запрос индексирования. Теперь так очевидно, что вы указали это. – icedawn

1

in mongodb3.4, уникальный и фон не поддерживаются в поле _id, возможны и другие поля.