こんにちは、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 です
しかし、それでもそのエラー!他に何を試すことができますか?