new mongoose.Schema({
fieldA: {
type: String,
required: true,
minlength: 3,
maxlength: 3,
},
fieldB: {
type: String,
maxlength: 20,
required: true,
trim: true,
}
}).index(
{
fieldA: 1,
fieldB: "text",
},
{unique: true}
)
mongod --version
db 版本 v4.2.6 git 版本: 20364840b8f1af16917e4c23c1b5f5efd8b352f8 allocator: system modules: none build environment: distarch: x86_64 target_arch: x86_64
"mongoose"。"5.9.13",
使用该约束条件,我输入了3个相同的值。fieldA
而第四个不合格的是 fieldB
这个不符合约束条件。
有人看过这个吗?谢谢
文本索引的唯一属性会有问题。 坦率地说,我很惊讶它被允许用这种约束来创建。
文本索引中的键并不将字段值作为一个整体使用。 它收集了索引中文本部分所包含的所有字段,按空格和标点分割它们,应用特定语言的词干和排序规则,每个术语在索引中作为一个单独的键使用。
虽然不清楚唯一约束在哪里被检查,但结果显然有些不一致。
底线是使用唯一约束与文本索引可能不是特别有意义,也不可能达到你想达到的效果。
如果你需要对该字段进行文本搜索,同时保证该字段对的唯一性,最好的选择是建立2个索引,一个在 {fieldA:1, fieldB:"text"}
没有唯一的约束,而一个关于 {fieldA:1, fieldB:1}
具有唯一的约束条件。