我正在尝试在MongoDB中使用update option { fullResult: true }
选项。
collection.update(query, payload, { fullResult: true }, function(err, result) {
console.log(result);
});
虽然它确实改变了结果的值,但我没有收回文件。相反,我回来了:
[ { updatedExisting: true,
n: 1,
lastOp: { _bsontype: 'Timestamp', low_: 1, high_: 1403025407 },
connectionId: 510045,
err: null,
ok: 1 } ]
为了回到更新后的文档,还有什么我应该做的吗?
答案 0 :(得分:12)
collection.findAndModify(query,[['_id',1]],payload,{new:true},function(err,result) {
if ( err ) {
console.warn(err);
} else {
console.log(result);
}
});
设置为new
时,true
选项将返回更新的文档。如果设置为false
,则会在更新之前返回旧文档。
findAndModify
还需要 sort 参数。如果排序不重要,那么在 _id 上排序就可以了,但是尝试对索引的内容进行排序。
将fullResult
与update
一起使用并不符合您的想法。我同意,文档有点令人困惑。让Node.js驱动程序源在/lib/mongodb/collection/core.js:568-572
568 if(fullResult) return callback(null, result);
569 // Backward compatibility format
570 var r = backWardsCompatibiltyResults(result, 'update');
571 // Return the results for a whole batch
572 callback(null, r.n, r)
无论是否使用fullResult
,都会返回result
对象而不是文档列表。 result
对象是通过db.command
从原始db命令返回的对象。在使用fullResult
的情况下,它将返回原始未修改的结果对象 - 但仍不是文档。