我正在使用mongodb进行更新,但不太熟悉如何在mongodb中完成任务。
Todo.update({}, {$set : { tags : []}}, false, true);
我如何获得WriteResult
?我想知道nMatched
和nModified
值。
我尝试了以下但是它不起作用。
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);
})();
答案 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