在MongoDB中更新和返回文档

新手上路,请多包涵

我想获得更新的文件。这是我的原始代码,它成功更新但不返回文档。

 collection.update({ "code": req.body.code },{$set:  req.body.updatedFields}, function(err, results) {
                        res.send({error: err, affected: results});
                        db.close();
                    });

我使用了 toArray 函数,但这给出了错误“如果没有提供回调,就无法使用 writeConcern”:

 collection.update({ "code": req.body.code },{$set:  req.body.updatedFields}).toArray( function(err, results) {
                    res.send({error: err, affected: results});
                    db.close();
                });

有任何想法吗?

原文由 user3803096 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 324
2 个回答

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

returnOriginal 选项(或 new 与 Mongoose)允许您指定将找到的文档的哪个版本(原始 [默认] 或更新)传递给回调。

returnOriginal 在版本 3.6 --- 中已弃用。使用 returnDocument: "before" | "after" 版本 3.6 及更高版本。


免责声明:此答案目前指的是 Node.js Driver 版本 3.6 。随着新版本的发布,请检查他们的文档以获取可能的新弃用警告和推荐的替代方案。

原文由 Jonathan Lonowski 发布,翻译遵循 CC BY-SA 4.0 许可协议

解决方法是设置:{returnOriginal: false}。

 collection.findOneAndUpdate(
        whereObj,
        updateObj,
        {returnOriginal: false});

原文由 milosnkb 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题