如何在mongodb中更新后获取结果?

问题描述 投票:0回答:2

我正在使用mongo db.I工作在节点js应用程序中。我在更新的部分之前显示关键字的结果。我想如果用户输入关键字那么它应该显示在json但是在new关键字之前在mongodb关键字成功更新时显示在res.json中。我做错了什么?

app.post('/keyword', isLoggedIn, function (req, res) {
               User.update({_id:req.user._id},{$addToSet:{keyword:req.body.tags}},function (err, result) {
                    if (err) return handleError(err);

                    return true;
                  });
                  console.log(w);
                  res.json({user:req.user})

        })

假设我已经在关键字数组中有'lio',当我输入'apple'时它应该显示两个结果但它只显示lio关键字。在页面重新加载后它会显示两个关键字。

json node.js mongodb
2个回答
0
投票

你这样做是错误的。 JavaScript是一种异步语言。在您的情况下,该函数返回数据而不等待响应。基本上,在执行更新功能之前返回数据。要解决此问题,请仅在更新功能内返回用户数据。

app.post('/keyword', isLoggedIn, function (req, res) {  
    User.findOneAndUpdate({_id:req.user._id},{$addToSet:
       {keyword:req.body.tags}, {returnNewDocument: true}},(err, result) => {
       if (err) return handleError(err);

       return res.json({user:user, result:result, flag: 1});
    });
});

您可以发送标志变量以检查值是否已正确更新。


0
投票

以下代码将尝试使用user._id值作为条件将标记数组推送到单个匹配文档中。

User.findOneAndUpdate(

    // <filter>
    {_id:req.user._id},

    // <update>
    {$push:{keyword: {$each: req.body.tags}}},

    // <options>
    {returnNewDocument: true} // Optional, depending on if you want the updated doc.

    // Callback
    function callback(err, doc, raw) { 
        // Evaluate callback code...
        res.json({user:req.user})
    }
);

有关每个参数的用途的更多信息,请参阅findOneAndUpdate文档。

© www.soinside.com 2019 - 2024. All rights reserved.