2
我做一个蒙戈Schema.save(),它会自动做一个更新插入,但它与蒙戈DB保存试图插入,而不是更新
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\')
}' }
复制密钥的价值是什么?我认为这是一个空字符串,或空,对吗?无论如何,这是一种危险的方法 - 您必须*在插入前重新获取对象;您的对象'theImpdate'完全来自客户端,并且可以拥有任何id,即使是不属于经过身份验证的用户的身份验证用户,它也可以让任何用户更新不属于他们的数据。 – mnemosyn 2014-12-05 15:10:42
没有。已经添加了上述函数的console.log输出... – 2014-12-05 15:15:42
嗯,也许JS驱动程序使用不同的标准来识别更新。重新获取对象是否首先解决问题? – mnemosyn 2014-12-05 15:21:22