mongodb

时间:2017-09-05 13:57:49

标签: mongodb indexing

我已使用f1, f2

在两个字段db.test.createIndex({"f1":"text","f2":"text"},{unique:true})上创建了索引
{
    "v" : 2,
    "unique" : true,
    "key" : {
        "_fts" : "text",
        "_ftsx" : 1
    },
    "name" : "f1_text_f2_text",
    "ns" : "test.test",
    "weights" : {
        "f1" : 1,
        "f2" : 1
    },
    "default_language" : "english",
    "language_override" : "language",
    "textIndexVersion" : 3
}

当我插入两个文件时

db.test.insert({f1:"hello",f2:"there"})
db.test.insert({f1:"hello",f2:"there2"})

我收到重复的密钥错误

"E11000 duplicate key error collection: test.test index: f1_text_f2_text dup key: { : \"hello\", : 1.1 }"

然而db.test.insert({f1:"hello2",f2:"there"})有效。

复合文本索引是否应该像常规复合索引一样工作?

1 个答案:

答案 0 :(得分:2)

您确定要获得唯一的文字索引吗?

如果您创建标准复合索引:

 onCheck = (id) => {
    this.setState((prevState) => {
      let options = [...prevState.options];
      options[id].checked = !options[id].checked;
      return {
        options: options,
        dataSource: this.state.cloneWithRows(options)
      };
    });
  }

然后以下插入将全部成功:

db.test.createIndex({"f1": 1, "f2": 1}, {unique: true})

然后此插入将失败并显示db.test.insert({f1:"hello",f2:"there"}) db.test.insert({f1:"hello",f2:"there1"}) db.test.insert({f1:"hello",f2:"there2"})

E11000 duplicate key error collection

您不必创建文本索引来索引字符串字段。 text index在支持文本搜索方面具有非常特定的作用,但并非所有字符串搜索都需要文本索引。所以,如果你必须......

  • 促进'快速'文字匹配涵盖db.test.insert({f1:"hello",f2:"there"}) f1
  • f2f1
  • 之间强制实现唯一性

...然后我怀疑你需要创建两个索引:

  • f2
  • db.test.createIndex({"f1":"text", "f2":"text"})