node.js - update - nodejs mongodb



猫鼬upsert重复键错误 (1)

我正在尝试做一个使用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 。 列出的重复键是元组资源/技能键。 为什么当它找到重复时不插入?


您在update查询条件参数中包含level ,因此,如果这还不匹配现有记录,则会尝试创建一个新的文档,使得只跨越skillresource的唯一索引失效。

尝试将您的update更改为:

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




mongoose