我知道我可以在模式中添加唯一字段,并使用一些库(例如mongoose-unique-validator
)我可以验证没有两个文档对该字段具有相同的值。
但是,如何确保所有字段的组合是唯一的?
E.g。应该允许这样做:
new Model({name: 'foo', prop: 'bar'})
new Model({name: 'qux', prop: 'bar'})
new Model({name: 'foo', prop: 'qux'})
但这不应该
new Model({name: 'foo', prop: 'bar'})
new Model({name: 'qux', prop: 'baz'})
new Model({name: 'foo', prop: 'bar'})
答案 0 :(得分:0)
我认为除了检查已检查对象中每个属性是否存在任何文档之外,还有其他选择。
async function hasAllProperitiesUnique(doc, cb){
var queries = [];
for (const v in doc) {
queries.push(Model.count({v:doc[v]}));
}
return Promise.all(queries).then(res=>res.reduce((p,c)=>p+c,0))===0;
}
答案 1 :(得分:0)
我认为你需要设置复合索引......你可以试试这个
schema.index({ "name": 1, "prop": 1 }, { unique: true, sparse: true })