【发布时间】:2014-12-29 17:49:51
【问题描述】:
我想测试用于更新的“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)可以是原始文档以防万一。
【问题讨论】:
标签: javascript node.js mongodb mongoose mongodb-query