2016-02-03 70 views
2

我在MongoDB中的一個模式中創建多個複合索引時遇到了一些問題。在使用MongoLab時,由於命名問題,我知道有些索引由於名稱太長而不能創建。所以我懷疑這可能是爲什麼有些不創建Mongoose複合索引未創建(太長)

var Schema = new mongoose.Schema({ ... }); 

// Created 
Schema.index({ 
    one: 1, 
    three: 1 
}); 

// Not Created 
Schema.index({ 
    one: 1, 
    two: 1, 
    three: 1, 
    four: 1, 
    five: 1, 
    six: 1, 
    seven: 1, 
    eight: 1, 
    nine: 1, 
    ten: 1 
}); 
+0

當創建第二個索引時,它是否在屏幕上打印了一些內容? 你怎麼知道第二個索引沒有創建?你有沒有檢查mongo shell? – somallg

+0

@somallg我還沒有添加任何日誌記錄。我確實檢查了mongo shell並且它沒有被創建,所以我怎麼知道。當我手動嘗試創建索引時,我得到以下內容:「由MongoDB生成的默認索引名稱太長,請指定一個自定義名稱。」 –

+1

您的權利對默認索引名稱有限制(https://docs.mongodb.org/manual/reference/limits/#Index-Name-Length) 您可以通過向模式傳遞添加選項來指定自定義名稱。指數 'Schema.index({ 之一:1, 兩種:1, 三:1, 四種:1, 五:1, 六:1, 七:1, 八:1, 9 :1, ten:1 },{name:'my_index_name'});' – somallg

回答

4

有一個限制到默認索引名的原因(https://docs.mongodb.org/manual/reference/limits/#Index-Name-Length

你可以通過另外的選擇對象Schema.index

指定自定義索引名
Schema.index({ 
    one: 1, 
    two: 1, 
    three: 1, 
    four: 1, 
    five: 1, 
    six: 1, 
    seven: 1, 
    eight: 1, 
    nine: 1, 
    ten: 1 }, 
    { name: 'my_index_name' } 
); 
+0

[「默認情況下,**''是字段名稱和索引類型的連接。**您可以明確指定'createIndex()'方法的''以確保全限定索引名稱不「**全限定索引名稱**,其中包含名稱空間和點分隔符(即'。$ '),**不能超過128個字符。**「](https://docs.mongodb.org/manual/reference/limits/#Index-Name -長度) –