2012-01-04 61 views
1

我無法刪除_id索引,爲什麼?mongodb:如何將一個字段添加到由複合索引組成的_id索引中

當我嘗試運行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});

上述命令剛剛創建了一個新的組合索引。我還沒有找到一些類似的「創建索引」命令。

默認_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是默認的唯一索引。 – 2013-05-09 18:05:39

回答

3

您不能刪除mongodb中「_id」的索引。

請參閱文檔here

4

有除了ensureIndexcreateIndex命令。

E.g.

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

所以,我不能創建_id索引的複合索引? – springchun 2012-01-05 05:34:41

+0

您可以使用_id創建複合索引。 'createIndex()'實際上在'ensureIndex()'中被調用來將索引添加到集合中。區別在於'ensureIndex()'調用'getLastError'來確保索引創建期間沒有錯誤。所以最好使用'ensureIndex()' – 2013-05-09 18:29:23

相關問題