我正在做一个Mongo Schema.save(),它应该自动执行upsert,但它坚持尝试插入然后使用
进行错误E11000 duplicate key error index
这是执行保存的节点功能:
exports.ImpdateSave = function(req, res) {
var theImpdate = new Impdate(req.body)
if (theImpdate){
var impdateId = req.params.id;
console.log("Node API Impdate: ", theImpdate);
console.log("Node API Impdate ID: ", impdateId);
theImpdate.save(function(err) {
if (err) {
console.log(err);
return res.send(400);
}
res.send(200);
});
} else {
return res.status(400).send('There was no person data in the request to update. Please try again!');
}
};
为什么在插入/更新之前进行初始搜索时无法找到文档,但是在插入/更新时找到它?
来自控制台的输出:
Node API Impdate: { _id: 5481c33cd8bf24f4235cff35,
_creator: 54679200502e901427fec6de,
name: 'XXXXX',
address: 'XXXXXXXXXXXXXXXX',
__v: 0}
Node API Impdate ID: 5481c33cd8bf24f4235cff35
{ [MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: fullstack-dev.impdates.$_id_ dup key: { : ObjectId('5481c33cd8bf24f4235cff35') }]
name: 'MongoError',
code: 11000,
err: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: fullstack-dev.impdates.$_id_ dup key: { : ObjectId(\'5481c33cd8bf24f4235cff35\')
}' }
答案 0 :(得分:2)
Mongoose的save
没有像你想的那样做一个upsert。当您在此处创建新的Impdate
对象时,即使已包含的_id
值已存在,也会将其视为新文档。
相反,_id
提供findOne
文档,应用正文中的新值和save
,或使用findByIdAndUpdate
。