2012-01-04 4 views
1

Я не могу удалить индекс _id, почему?mongodb: как добавить одно поле в индекс _id, составленный из индекса Compound

Когда я пытаюсь запустить команду dropIndexes, она удаляет все индексы, но не индекс _id.

Ведение 'db.runCommand' не работает либо:

> db.runCommand({dropIndexes:'fs_files',index:{_id:1}}) 
{ "nIndexesWas" : 2, "errmsg" : "may not delete _id index", "ok" : 0 } 

не ок.

Могу ли я использовать поле, включающее _id в составном индексе?

Я ничего не мог найти, команда ensureindex не может этого сделать.

db.fs_files.ensureIndex ({'_ id': 1, 'created': 1});

приведенная выше команда только что создала новый составной индекс. я не нашел некоторую подобную команду create index.

индекс _id по умолчанию является уникальным индексом?

getIndexes возвращает это не уникальный индекс.

{ 
    "v" : 1, 
    "key" : { 
      "_id" : 1 
    }, 
    "ns" : "gridfs.fs_files", 
    "name" : "_id_" 
}, 
{ 
    "v" : 1, 
    "key" : { 
      "created" : 1 
    }, 
    "unique" : true, 
    "ns" : "gridfs.fs_files", 
    "name" : "created_1" 
} 
+0

Как сказал Тайлер, вы не можете отказаться от индекса _id. Но вы можете создать составной индекс, который включает _id. - И да _id - уникальный индекс по умолчанию. –

ответ

3

Вы не можете удалить индекс на «_id» в mongodb.

Пожалуйста, обратитесь к документации here

4

Существует createIndex команда в дополнение к ensureIndex также.

E.g.

db.<coll>.createIndex({foo:1}) 
+0

поэтому я не могу создать составной индекс для индекса _id? – springchun

+0

Вы можете создавать составные индексы с помощью _id. 'createIndex()' фактически вызывается внутри 'sureIndex()' для добавления индекса в коллекцию. Разница в том, что 'makeIndex()' вызывает 'getLastError', чтобы убедиться, что при создании индекса не было ошибок. Поэтому лучше использовать 'sureIndex()' –