我想获得更新的文件。这是我的原始代码,它成功更新但不返回文档。
collection.update({ "code": req.body.code },{$set: req.body.updatedFields}, function(err, results) {
res.send({error: err, affected: results});
db.close();
});
我曾经使用过阵列功能,但这给出了错误"如果没有提供回调就不能使用writeConcern":
collection.update({ "code": req.body.code },{$set: req.body.updatedFields}).toArray( function(err, results) {
res.send({error: err, affected: results});
db.close();
});
有什么想法吗?
答案 0 :(得分:29)
collection.update()
只会报告受其回调影响的文档数量。
要在修改时检索文档,您可以改为使用collection.findOneAndUpdate()
(以前为.findAndModify()
)。
collection.findOneAndUpdate(
{ "code": req.body.code },
{ $set: req.body.updatedFields },
{ new: true },
function (err, documents) {
res.send({ error: err, affected: documents });
db.close();
}
);
请注意,它会修改.update()
期望multi: true
执行此操作的所有匹配文档。
注意:目前指的是version 2.2的Node.js驱动程序。对于将来的版本,请检查文档中的弃用警告,并使用推荐的替代方案。
答案 1 :(得分:7)
解决方案是设置:{returnOriginal:false}。
collection.findOneAndUpdate(
whereObj,
updateObj,
{returnOriginal: false});
答案 2 :(得分:1)
无法找到更新许多内容并在docs中返回已修改记录的方法,因此我做了一个解决方法。
我可以通过以下方法找到至少一个错误,您将无法判断文档是否已被修改或已经具有您正在使用的值:
function findAndUpdateMany(filter, updateOptions) {
return collection.find(filter).project({_id: 1}).toArray()
.then(function(matchingIds) {
filter = {_id: {$in: matchingIds}}
return collection.updateMany(filter, updateOptions)
}).then(function() {
return collection.find(filter).toArray()
})
}
答案 3 :(得分:-4)
签出WriteResult对象:
http://docs.mongodb.org/manual/reference/method/db.collection.update/#writeresults-update
WriteResult result = collection.update({ "code": req.body.code },{$set: req.body.updatedFields}, function(err, results) {
res.send({error: err, affected: results});
db.close();
});
结果应该是这样的:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
如果您想要更新结果,请使用主键执行另一个查询。