繁体   English   中英

猫鼬确保文档唯一

[英]mongoose make sure document is unique

我知道我可以在架构中添加唯一字段,并使用某些库(例如mongoose-unique-validator )可以验证没有两个文档对该字段具有相同的值。

但是,如何确保所有字段的组合是唯一的?

例如,应允许:

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'})

我认为除了检查对象中每个属性是否存在任何文档外,没有其他选择。

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;
}

我认为您需要设置复合索引...您可以尝试一下

schema.index({ "name": 1, "prop": 1 }, { unique: true, sparse: true })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM