您好我想查询 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
但是还是那个错误!我还能尝试什么?