我想获得更新的文件.这是我的原始代码,它成功更新但不返回文档.
collection.update({ "code": req.body.code },{$set: req.body.updatedFields}, function(err, results) {
res.send({error: err, affected: results});
db.close();
});
Run Code Online (Sandbox Code Playgroud)
我曾经使用过Array函数,但是这给出了错误"不能在没有提供回调的情况下使用writeConcern":
collection.update({ "code": req.body.code },{$set: req.body.updatedFields}).toArray( function(err, results) {
res.send({error: err, affected: results});
db.close();
});
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Jon*_*ski 42
collection.update() 只会报告受其自身回调影响的文档数量.
要在修改时检索文档,可以collection.findOneAndUpdate()改为使用(以前.findAndModify()).
collection.findOneAndUpdate(
{ "code": req.body.code },
{ $set: req.body.updatedFields },
{ returnOriginal: false },
function (err, documents) {
res.send({ error: err, affected: documents });
db.close();
}
);
Run Code Online (Sandbox Code Playgroud)
请注意,它将修改.findOneAndUpdate期望{returnNewDocument: true}执行相同操作的所有匹配文档.
注意:从2.2版开始,当前是指Node.js驱动程序.对于将来的版本,请检查文档中的弃用警告,并使用推荐的替代方案.
解决方案是设置:{returnOriginal:false}。
collection.findOneAndUpdate(
whereObj,
updateObj,
{returnOriginal: false});
Run Code Online (Sandbox Code Playgroud)
找不到任何方法来更新许多并返回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()
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37043 次 |
| 最近记录: |