Есть ли способ увеличить значение в модели на активность пользователя, например, комментировать? - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь увеличивать текущее значение дохода пользователя каждый раз, когда он / она комментирует блог. Я пишу криптографическую программу с Node и Express для Backend и MongoDB для базы данных. Я хочу иметь возможность увеличивать сумму (текущую) заработанных пользователями за комментарии, которые они делают на платформе.

Я попытался добавить поле "заработок" в модель пользователя и установить для него значение Number, потому что это то, что мне действительно нужно. Затем я написал несколько строк кода, чтобы увеличить текущее количество пользователей после комментирования в любом месте приложения (блога), но это, похоже, не работает. Вместо этого он возвращает тот же номер, который равен 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 ]

0 голосов
/ 19 июня 2019

Я думаю, вам нужно обновить документ пользователя после создания комментария. В данный момент вы просто делаете User.earning += 20, но не указываете какого пользователя и даже не сохраняете его. Вам нужно использовать User.findOneAndUpdate и $inc, чтобы увеличить числовое значение.

Попробуйте это:

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

вместо

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

И только после успешного выполнения запроса на обновление вы сможете убедиться, что он был обновлен.

Кроме того, я бы предложил создать документ Your Comment и сохранить его сразу. Кроме того, заработок не будет отражен в объекте 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);
    }
})
0 голосов
/ 19 июня 2019

Вам нужно использовать оператор «$ inc» для увеличения любого числового значения. Кроме того, используйте «обновить», а не «сохранить», чтобы обновить документ.

Ссылка: Документация MongoDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...