Mongoose upsert重复键错误

时间:2013-08-07 18:35:42

标签: node.js mongodb mongoose

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

1 个答案:

答案 0 :(得分:7)

您在level查询条件参数中包含update,因此,如果这也不符合现有记录,则会尝试创建一个新文档,该文档将使唯一索引失败范围skillresource

尝试将update更改为:

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