mongoDB全文索引出错, v3.4版

> 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"});

设置ensureIndex后出现错误:

{
        "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"
}
阅读 4.5k
2 个回答

首先在 v3.4 版本这个方法 ensureIndex() 改名了。现在的别名叫 createIndex()文档

其次,这个方法的用法是

db.col.ensureIndex({"title":1})

后面跟 1 或者 -1 代表排序方式,还可以是 text 是全文索引,还可以是地理位置索引 2d2dphere。(根据 @Mongoing中文社区 的回答做一下补充)

中文文档
英文文档

上面的意思应该是你已经设置过了,索引已经存在了。冲突了。

楼上说得没错,不过后面不一定要跟1或-1,"text"是全文索引,还可以是地理位置索引"2d"或"2dphere"。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进