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

时间:2017-12-15 10:26:17

标签: json node.js mongodb

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

cv2.getPerspectiveTransform(src, dst)

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

2 个答案:

答案 0 :(得分: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文档。

答案 1 :(得分: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});
    });
});

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