我已使用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"})
有效。
复合文本索引是否应该像常规复合索引一样工作?
答案 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
f2
和f1
...然后我怀疑你需要创建两个索引:
f2
db.test.createIndex({"f1":"text", "f2":"text"})