Node.js mongoose确保文档是唯一的

Node.js mongoose确保文档是唯一的,node.js,mongodb,mongoose,schema,Node.js,Mongodb,Mongoose,Schema,我知道我可以在模式中添加唯一字段,并且使用一些库(例如,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

我知道我可以在模式中添加唯一字段,并且使用一些库(例如,
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 })

我下面提供的答案有什么问题吗?@AnthonyWinzlet我实际上对这个^^^项目没有记忆,所以我假设在我问了这个问题后,答案对我来说不再有趣了。我可能还没有测试你的答案。好吧,但你应该接受答案。如果您在测试时遇到任何问题,可以联系我。