2017-08-13 164 views
0

使用搜索索引時出現錯誤,我使用v3.4。mongoDB搜索文本錯誤

> db.test2.insert({string:"aa bb cc"}); 
WriteResult({ "nInserted" : 1 }) 
> db.test2.insert({string:"aa 88 99"}); 
WriteResult({ "nInserted" : 1 }) 
> db.test2.ensureIndex({'string':"text"}); 


{ 
     "ok" : 0, 
     "errmsg" : "Index: { v: 2, key: { _fts: \"text\", _ftsx: 1 }, name: \"string_text\", ns: \"test2.test2\", weights: { string: 1 }, default_language: \"english\", language_override: \"language\", textIndexVersion: 3 } already exists with different options: { v: 2, key: { _fts: \"text\", _ftsx: 1 }, name: \"post_text_text\", ns: \"test2.test2\", weights: { post_text: 1 }, default_language: \"english\", language_override: \"language\", textIndexVersion: 3 }", 
     "code" : 85, 
     "codeName" : "IndexOptionsConflict" 
} 

回答

0

您可能已經對string字段進行了索引。要檢查以前的指標,如果存在,則可以在此之後,你可以爲string

db.test2.createIndex({ string: "text" }); 

NB重新創建索引此指令

db.test2.dropIndex({ "string": 1 }); 

刪除指數運行此命令

db.test2.getIndexes(); 

:字段名稱不應該使用像變量類型名稱string(雖然您沒有使用String),Int

+0

實際上它是我第一次設置這個文本索引。我試過你的方法,它顯示「code」:27,「codeName」:「IndexNotFound」。雖然沒有找到,我仍然得到這個錯誤信息,當我設置索引「代碼」:85,「codeName」:「IndexOptionsConflict」 –

+0

我可以問我是否可以只設置一個索引的文本?因爲我之前設置了其他鍵的索引文本,不確定它是否會影響它。如果是的話,你能幫助告訴我如何刪除所有索引?因爲我不記得我設置的文字是什麼索引。 –

+0

可能的多個文本索引,您可以通過此命令'db.test2.getIndexes();'查看所有索引,並使用'db.test2.dropIndex(「*」);'刪除此集合的所有索引並更改字段名稱'字符串'到另一個不涉及'數據類型' –