繁体   English   中英

单击按钮更新MongoDB

[英]MongoDB update upon button click

在我看来,我正在将用户从'/ dashboard'定向到'/ upvote'

在我的路线中,我有:

app.get('/upvote', function(req, res) {
        user = req.user
        user.score += 1;
        user.save();
        res.redirect('/dashboard');
    });

这只是一个示例,试图在以后的阶段中掌握如何将其用于其他目的。

如何正确更新用户的“ score”属性以在每次有“ / upvote /”的GET命令时增加?

您需要在请求中找到给定的用户; req.user只是一个对象,而不是猫鼬模型。 如果您具有文档的ID,则可以使用findById。 如果不这样做,则需要在另一个字段上使用查找查询。

// Users is the mongoose model
Users.findById(id, function (err, user) {
  if (err) return handleError(err);

  user.score += 1;

  user.save(function(err) {
    if (err) return handleError(err);
    res.send(user); // Or redirect, basically finish request.
  });
});

第二-我不一定要进行重定向。 您可以停留在同一页面上,只需让命令刷新用户模型即可。

如果分别修改然后保存user文档,则在并发请求期间可能会失去投票。

相反,请使用带有$inc运算符的update来使upvote原子化:

app.get('/upvote', function(req, res) {
    User.update({_id: req.user._id}, {$inc: {score: 1}}, function(err, count) {
        res.redirect('/dashboard');
    });
});

顺便说一句,您应该考虑使用POST或PUT请求而不是GET,因为GET请求不应更改数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM