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 version: 2.4.1 mongoosejs は バージョン 3.6.4 です

しかし、それでもそのエラー!他に何を試すことができますか?

4

0 に答える 0