如何在mongodb中获取更新查询WriteResult

时间:2015-01-31 09:00:42

标签: javascript mongodb updates

我正在使用mongodb进行更新,但不太熟悉如何在mongodb中完成任务。

Todo.update({}, {$set : { tags : []}}, false, true);

我如何获得WriteResult?我想知道nMatchednModified值。

我尝试了以下但是它不起作用。

var updateResult = Todo.update({}, {$set : { tags : ['test']}}, false, true);
(function(updateResult){
    console.log('Size of match: ' + updateResult.nMatched);
    console.log('Size of modified: ' + updateResult.nModified);
})();

2 个答案:

答案 0 :(得分:2)

首先,重要的是要理解Todo.update是一个异步函数,它将结果传递给回调函数而不是返回它。

但是Mongoose update函数也以与shell不同的方式获取其参数。

所以你的代码看起来应该是这样的:

Todo.update({}, 
            {$set: {tags: []}}, 
            {upsert: false, multi: true}, 
            function(err, numberAffected, rawResponse) {
    console.log('Number of docs modified: ' + numberAffected);
});

回调的rawResponse参数包含Mongo的完整响应,但这在使用upsert时才有用。

答案 1 :(得分:1)

这是你的问题,因为updateResult在你自己调用的匿名函数中是未定义的,因为你没有传递给它。 (在mongoshell中也没有console.log,但它并不那么重要)。您必须将updateResult作为参数传递给函数。像这样:

(function(r){
    print('Size of match: ' + r.nMatched);
    print('Size of modified: ' + r.nModified);
})(updateResult);

然后你会得到这样的东西:

Size of match: 1
Size of modified: 0