Я делаю Монго Schema.save(), который должен автоматически делать upsert, но она настаивает на том, чтобы сделать вставку, а затем ошибки сМонго DB Сохранить пытается вставить вместо обновления
E11000 duplicate key error index
Это функция Node, что делает сохранить:
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' поступает от клиента целиком и может иметь любой идентификатор, даже тот, который не принадлежит аутентифицированному пользователю, который позволит любому пользователю обновлять данные, которые им не принадлежат. – mnemosyn
Нет. Добавили вывод console.log из функции выше ... –
Хм, возможно, драйвер JS использует разные критерии для идентификации обновления. Повторное извлечение объекта сначала решает проблему? – mnemosyn