我正在尝试使用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
。列出的重复键是元组资源/技能键。当它找到重复时为什么不进行插入?
答案 0 :(得分:7)
您在level
查询条件参数中包含update
,因此,如果这也不符合现有记录,则会尝试创建一个新文档,该文档将使唯一索引失败范围skill
和resource
。
尝试将update
更改为:
ResourceSkillLevel.update({
resource: self._id,
skill: skill._id
}, {$set: {level: level}}, {upsert: true}, cb);