【问题标题】:mongoose make sure document is unique猫鼬确保文件是唯一的
【发布时间】:2018-11-25 23:49:15
【问题描述】:

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

【问题讨论】:

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

标签: node.js mongodb mongoose schema


【解决方案1】:

我觉得你需要设置复合索引...你可以试试这个

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-12
      • 2017-04-07
      • 1970-01-01
      • 2016-02-10
      • 2022-01-17
      • 2020-10-03
      • 1970-01-01
      • 2018-06-11
      相关资源
      最近更新 更多