我正在使用Mongoose插件开发Express.js。
我有一个这样的架构:
var schema = new Schema({
field1: {
type: String,
required: true,
},
field2: {
type: [{
field2_1: {
type: Schema.Types.ObjectId,
required: true,
},
field2_2: {
// other field
},
}],
required: true
}
}, {
// options
versionKey: false,
_id: true,
id: false,
});
如您所见,field2是array
中的Object
。
如果可能的话,我想在多个字段上设置唯一的约束:field1
和field2_1
。
通过这些操作,我无法获得想要的结果:
unique:true
设置为两个字段schema.index({ field1: 1, field2_1: 1 }, { unique: true });
创建唯一索引我想提到的第二点是不起作用的,因为字段field2_1
不是模式的直接成员。我也尝试索引field2.field2_1
,但这给我一个错误。
所以我的问题是:在这种情况下是否可以对多个字段使用唯一约束?
编辑:我也尝试过schema.index({ field1: 1, "field2.field2_1": 1 }, { unique: true });
,没有编译错误,但是在Mongo不会抛出任何异常的情况下,我仍然可以违反约束。