Mongoose upsert 重复键错误
Posted
技术标签:
【中文标题】Mongoose upsert 重复键错误【英文标题】:Mongoose upsert duplicate key error 【发布时间】: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
。列出的重复键是元组资源/技能键。为什么找到重复项时不更新插入?
【问题讨论】:
【参考方案1】:您在update
查询条件参数中包含level
,因此,如果这与现有记录不匹配,它将尝试创建一个新文档,该文档将失败仅跨越skill
的唯一索引和resource
。
尝试将您的 update
更改为:
ResourceSkillLevel.update(
resource: self._id,
skill: skill._id
, $set: level: level, upsert: true, cb);
【讨论】:
以上是关于Mongoose upsert 重复键错误的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb/Mongoose bulkwrite(upsert) 性能问题
Mongoose - 由 :: 11000 E11000 重复键错误索引引起?