MongoDB,带条件的增量字段

时间:2018-01-12 12:40:54

标签: node.js mongodb mongoose

是否有可能使用mongoose中间件增加两个字段一个条件而另一个没有?在这种情况下,我想将“stats.ratings”增加1,如果用户插入大于0的输入,则增加零。

“stats.answered”总是增加一个

见下面的代码

 module.exports.updateStats = function (req, res) {

            var rating = parseInt(req.body.rating, 10);
            var wasRated;
            if (rating > 0) {
                wasRated = true;    
            } else wasRated = false

            Collection.findOneAndUpdate({
                        _id: req.body._id
                    }, {
                        $cond: {
                            if: wasRated,
                            then: {
                                $inc: {
                                    "stats.answered": 1,
                                    "stats.ratings": 1
                                }
                            },
                            else: {
                                $inc: {
                                    "stats.answered": 1,
                                    "stats.ratings": 0
                                }
                        }
                    }
                },
                function (err, doc) {
                    if (err)
                        throw err;
                    res.status(200);
                })
        }

1 个答案:

答案 0 :(得分:2)

你可以做的是:

// define the default case
var update = {
    $inc: {
        "stats.answered": 1
    }
};

if(parseInt(req.body.rating, 10) > 0) {
    // override default in some cases
    update = {
        $inc: {
            "stats.answered": 1,
            "stats.ratings": 1
        }
    }
}

然后

Collection.findOneAndUpdate({
            _id: req.body._id
        }, update,
    function (err, doc) {
        if (err)
            throw err;
        res.status(200);
    })

}