当前位置: 首页 > 知识库问答 >
问题:

有没有一种方法,我可以增加一个用户的activity,如评论,在模型中的一个值?

盖马鲁
2023-03-14

我试图增加用户每次在博客上发表评论时的当前收入值。我正在用Node和Express为后端编写加密程序,用MongoDB为数据库编写加密程序。我想能够增加一个用户赚得的金额(当前)每评论他们在平台。

我尝试在用户模型中添加一个“收入”字段,并将其设置为Number,因为这正是我实际需要的。然后,我编写了几行代码,以增加用户在应用程序(blog)中任何地方发表评论时的当前数量,但这似乎不起作用。相反,它返回相同的数字,即20。我将它设置为每个注释添加20个,但它总是返回20而不是20,40,60...我的代码如下

    // my model
    var userSchema = new mongoose.Schema({
        username: String,
        firstName: String,
        lastName: String,
        earnings: 0,
        email: String,
        password: String
    })


    // my routes
router.post('/', middleware.isLoggedIn, (req, res) => {
    // find blog using ID
    Blog.findById(req.params.id, (err, blog) => {
        if(err) {
            console.log('Error:', err);
            res.redirect('/blogs');
        } else {
            Comment.create(req.body.comment, (err, comment) => {
                if(err) {
                    req.flash('error', 'Something went wrong');
                    console.log('Error:', err);
                } else {
                    // add id
                    comment.author.id = req.user._id;
                    comment.author.username = req.user.username;
                    var total = Number(req.user.earnings);
                    // save comment
                    comment.save();
                    User.earnings = total;
                    User.earnings += 20;
                    blog.comments.push(comment);
                    blog.save();
                    res.redirect('/blogs/' + blog._id);
                    console.log(req.user.earnings);
                    console.log(User.earnings);
                }
            })
        }
    });
});

我希望收益值会增加,并为特定用户的每个评论保存

共有2个答案

徐栋
2023-03-14

您需要使用“$INC”运算符来增加任何数值。另外,使用“update”而不是“save”来更新文档。

参考:MongoDB文档

汪德明
2023-03-14

我认为您需要在创建评论后更新用户的文档。现在您只是执行user.rearning+=20,但没有指定哪个用户,甚至没有保存它。您需要使用user.findoNeanDupdate$inc来增加数字值。

试试看:

User.findOneAndUpdate({_id : req.user._id},{$inc : {earnings : 20}});

而不是

User.earnings = total;
User.earnings += 20;

并且只有在成功执行更新查询之后,您才能够验证它是否已更新。

此外,我会建议创建您的评论文档并保存它一次。而且,收入不会反映在req.user对象中,所以您需要自己修改它。‘查询应如下所示:

Comment.create(req.body.comment, (err, comment) => {
    if(err) {
        req.flash('error', 'Something went wrong');
        console.log('Error:', err);
    } else {
        // add id
        comment.author.id = req.user._id;
        comment.author.username = req.user.username;
        var total = Number(req.user.earnings);
        // save comment
        comment.save();
        User.findOneAndUpdate({_id : req.user._id},{$inc : {earnings : 20}})
            .then((err,user) => {
                 console.log(user.earnings)
            });
        blog.comments.push(comment);
        blog.save();
        res.redirect('/blogs/' + blog._id);
        console.log(req.user.earnings); //i dont think your req.user object will be updated by itself
        console.log(User.earnings);
    }
})
 类似资料:
  • 问题内容: 在此问题中找到了我能找到的最接近的示例:https : //github.com/tensorflow/tensorflow/issues/899 使用此最小的可复制代码: 但是,返回的FLOPS始终为“无”。有没有一种方法可以具体测量FLOPS,尤其是PB文件? 问题答案: 有点晚了,但也许将来对某些访客有帮助。对于您的示例,我成功测试了以下代码段: 也可以将分析器与以下代码段结合使

  • 我知道一个测试可以通过运行来运行,在sbt中, 有没有办法告诉sbt/scalatest在没有标签的情况下运行单个测试?例如: 这意味着“在类中运行第二个测试。不管它是什么”。我们有一堆测试,没有人费心去标记它们,那么有没有办法在没有标签的情况下运行单个测试?

  • 问题内容: 假设我有以下代码: 这段代码的问题在于,协程内部的循环永远不会完成第一次迭代,而大小会不断增加。 为什么会这样发生,我该怎么解决? 我无法摆脱单独的线程,因为在我的真实代码中,我使用了单独的线程与串行设备进行通信,而且我还没有找到使用的方法。 问题答案: 不是线程安全的,因此您不能直接在多个线程中直接使用它。相反,您可以使用,它是提供线程感知队列的第三方库: 还有(全披露:我写了它),

  • 问题内容: 我正在尝试建立一个简单的Java程序,该程序可以从其他多个图像(jpg)创建一个动画gif。谁能给我一个有关如何在Java中实现此目标的信息?我已经搜索过Google,但找不到任何真正有用的信息。 感谢你们! 问题答案: 这里有一个类的示例,该类从不同的图像创建动画的gif: 链接 编辑:链接似乎已死。 无论如何,为了清楚起见,这段代码是由Elliot Kroo完成的。 编辑2:感谢您

  • Go的范围可以在地图和切片上迭代,但我想知道是否有一种方法可以在一系列数字上迭代,比如: 或者有没有一种方法来表示Go中的整数范围,就像Ruby对类范围所做的那样?