Я хочу проверить, работает ли опция "upsert" для обновления. Поэтому я дважды «вставляю» объект в mongodb с одним и тем же ключом. Однако он не отображал вставленное сообщение. Я что-то упустил?
(mongodb: v2.6.3; мангуст: 3.8.15)
Member.findOneAndRemove({user_id: 1},
function (err, doc) {
if (!err) onsole.log(doc ? 'deleted' : 'not found');
}); // -> deleted, make sure user_id = 1 doesn't exist
Member.update({user_id: 1},
{$set: {name: "name1"}},
{upsert: true, new: false}, // new : false, so that I can detect original doc is null then know it's a new one.
function (err, doc) {
if (!err) {
console.log(doc ? 'updated' : 'inserted')
}
}); // -> updated ? But it shoule be inserted, right ?
Member.update({user_id: 1},
{$set: {name: "name2"}},
{upsert: true, new: false},
function (err, doc) {
if (!err) {
console.log(doc ? 'updated' : 'inserted')
}
}); // -> updated, yes, no problem.
Спасибо за любой намек.
============ ответ =============
Используйте .findOneAndUpdate вместо .update! Кроме того, убедитесь, что опция {upsert: true, new: false}, чтобы второй параметр обратного вызова (doc) мог быть исходным документом на всякий случай.