无法即时更新 mongodb 文档

Posted

技术标签:

【中文标题】无法即时更新 mongodb 文档【英文标题】:Can't update the mongodb document on the fly 【发布时间】:2015-02-21 13:44:15 【问题描述】:

我对 Node.js 和 MongoDB 还是很陌生。我正在尝试使用此代码,其中我有一个名为 test 的布尔文档,该文档在 Mongodb 中最初为“假”,我想在加载页面 /hello 时提醒这一点。然后转到另一个页面提交表单并将 test 更新为 true 并再次加载 /hello。所以这一次它应该提醒真实(当我检查数据库时它已经更新为真实)但是当我测试它时它不会提醒任何东西。如果你让我知道什么时候做错了,那就太好了!

这是我的 app.js 中的相关代码

app.post("/Submitted", function(req,res) 
    var conditions = mongoose.model('users').findOne(username: req.session.user.username, function (err, doc)
      doc.test = true;
      doc.save();
        res.redirect('hello');
    );


app.get('/hello', function (req, res) 
    var umbrella = req.session.user.test;
    if (req.session.user) 
        res.render('5points', test: test);
     else 
        res.redirect('/');
    
);

这是我的玉文件:

script.
  function check() 
    var test= !JSON.stringify(test);
    alert(test);
body(onload= "check()")

【问题讨论】:

【参考方案1】:

在 doc.save 完成之前触发 res.redirect('hello')。记住 node.js 是非阻塞 I/O。所以你需要在 回调中调用 res.redirect保存。

app.post("/Submitted", function(req, res) 
    var conditions = mongoose.model('users').findOne(
            username: req.session.user.username
        , function(err, doc) 
            doc.test = true;
            doc.save(function(err) 
                if (err) return res.json(message: "error");
                res.redirect('hello');
            );
        
    );
);

【讨论】:

您好,感谢您的回复。我试过这个。现在它会提醒它,但它会提醒它 false 而不是 true,尽管它已经在数据库中更新了它。 真的会是会话没有更新吗?!因为如果用户再次登录它工作正常!无论如何要更新会话?!

以上是关于无法即时更新 mongodb 文档的主要内容,如果未能解决你的问题,请参考以下文章

无法更新 mongoDB 文档

MongoDB安装和入门

MongoDB面试题

Mongodb怎样更新像这样的文档,数组里面有子文档

通过在 body、mongoose/mongodb 中提供文档来更新多个文档

MongoDB - 无法将时间戳字段添加到数组中的子文档