簡體   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