0

您好我想查询 mongodb 聚合的加减法

这就是我现在所做的,

//schema for image
{
votes : {type:Number},
comments : {type :Array},
name : {type:String}
}

var o = {};
o.map = function () { emit(this._id, (4*(parseInt(this.votes)))+(3*(parseInt(this.comments.length)))+(0*(parseInt(this.views)))) }(parseInt(this.comments.length)))))/(parseInt(currentDate-this.created_at.getDate())+1) }
o.reduce = function (k,v) { return parseInt(v); }
o.out = { replace: 'trending_images' }
o.verbose = true;
Image.mapReduce(o, function (err, model, stats) {
    console.log('map reduce took %d ms', stats.processtime)
model.find({created_at:{
            $gte : weekBack,
            $lt:today
            }}).sort('-value').limit(limit).skip(skip).exec(function (err, docs) {
    async.mapSeries(docs,function (doc,cb){
        cb(null,doc._id);
    },function (err,ids) {
        console.log("Trending mapreduce",JSON.stringify(ids),ids);
        return cb({_id:{$in:ids}})
    })
});
});

我如何在聚合框架中做类似的事情?

更新:这是我尝试过的。

Image.aggregate(
    {$project : {
        _id : 1,
        trending : {
            total_votes : {$multiply:["$votes", 4]},
            total_comments : {$multiply:["$comments.length", 3]},
            rank : {$sum:["$total_comments","$total_votes"]}
        }
    } },
    {$match:{created_at:{
                    $gte : weekBack,
                    $lt:today
                    }}
                },
        {$sort : {rank:-1} }
        ,
        function (err,images) {
    console.log(err,images);
}
)

不确定这是否有效,因为它会引发错误,[MongoError: no such cmd: aggregate]

我检查了 mongodb 和 mongoosejs 的版本,mongodb 是版本MongoDB shell 版本:2.4.1 mongoosejs 是版本 3.6.4

但是还是那个错误!我还能尝试什么?

4

0 回答 0