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