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

How to get update query WriteResult in mongodb

我正在 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);
})();

这是你的问题,因为 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

首先,重要的是要了解 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 时有用。