从MongoDB获取avarage值

时间:2017-08-28 07:01:32

标签: mongodb mongoose

我有这个猫鼬模型:

var juomaSchema = new mongoose.Schema({
    ...
    valikoima: String,
    img: String,
    views: {default: 0, type: Number},
    rating: [],
    ...

});
juomaSchema.methods.getAvarageRating = function() {
    if (this.rating.length !== 0) {
        var totalScore = 0;
        this.rating.forEach(function(drinkRating) {
            totalScore += drinkRating
        });
        return totalScore/this.rating.length;
    } else {
        return 0;
    }
};

我的问题是,我需要按评级字段的avarage评级对查询进行排序。 我已经在模型中使用了该方法,但我似乎无法在排序查询中使用函数。

我的排序:

router.get("/oluet", function(req, res) {
var perPage = 20,
    page    = req.query.page,
    sortBy  = req.query.sort,
    asc     = req.query.asc;

var sort = {[sortBy] : asc};
console.log(sort);
if(req.xhr) {
    //Sanitazes input
    const regex = new RegExp(escapeRegExp(req.query.search), "gi");
    Juoma.find({nimi: regex, tyyppi: "oluet"})
        .sort(sort)
        .limit(perPage)
        .skip(perPage * page)
        .exec(function(err, drinks) {

我该怎么做?制作两个字段:totalRating和timesRates,并做一些聚合魔术?

1 个答案:

答案 0 :(得分:0)

Felix在

的评论中解决了这个问题
{
    $project: {
        avg: {$avg: "$rating"}
    }
}