【问题标题】:Mongoose upsert duplicate key errorMongoose upsert 重复键错误
【发布时间】:2013-08-09 06:53:47
【问题描述】:

我正在尝试使用 Mongoose 进行 upsert,但是对于应该触发 upsert 的键,我遇到了重复键错误。

架构:

"resource": {type: Schema.ObjectId, ref: "Resource"},                       
"skill": {type: Schema.ObjectId, ref: "Skill"},                             
"level": {type: Number, min: 1, max: 5}

.index({skill: 1, resource: 1}, {unique: true});

然后我打电话:

    //self is a Resource instance
    ResourceSkillLevel.update({                                           
        resource: self._id,
        skill: skill._id,
        level: level
    }, {$set: {level: level}}, {upsert: true}, cb);

如果(resource, skill) 不存在,则此调用可以正常工作并正确创建ResourceSkillLevel 条目。但是,当我再次调用它时,我得到duplicate key error index。列出的重复键是元组资源/技能键。为什么找到重复项时不更新插入?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您在update 查询条件参数中包含level,因此,如果这与现有记录不匹配,它将尝试创建一个新文档,该文档将失败仅跨越skill 的唯一索引和resource

    尝试将您的 update 更改为:

    ResourceSkillLevel.update({                                           
        resource: self._id,
        skill: skill._id
    }, {$set: {level: level}}, {upsert: true}, cb);
    

    【讨论】:

      猜你喜欢
      • 2016-09-14
      • 2018-03-04
      • 2018-10-12
      • 2015-05-01
      • 2012-01-10
      • 1970-01-01
      • 2021-07-31
      • 2016-10-31
      相关资源
      最近更新 更多