Mongoose upsert重复键错误

Exp*_*lls 4 mongoose mongodb node.js

我正在尝试使用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});
Run Code Online (Sandbox Code Playgroud)

然后我打电话:

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

如果(resource, skill)不存在,则此调用正常工作并正确创建ResourceSkillLevel条目.然而,当我再次打电话给我时,我得到了duplicate key error index.列出的重复键是元组资源/技能键.当它找到重复时为什么不进行上传?

Joh*_*yHK 7

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

尝试将您update改为:

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