如果您有以下数据,则使用MongoChef聚合:
{_id: 1, Mnt: 2016-05-01, Score: 85}
{_id: 2, Mnt: 2016-05-01, Score: 85}
{_id: 3, Mnt: 2016-03-01, Score: 80}
{_id: 4, Mnt: 2016-03-01, Score: 80}
{_id: 5, Mnt: 2016-03-01, Score: 80}
{_id: 6, Mnt: 2016-01-01, Score: 75}并希望:
例如:
{M1 : 85, M2 : 82, M3 : 80.8}也就是说,M1是收集中最大月的平均值,M2是收集中最大2个项目月的平均值,M3是收集中最大3个项目月的平均值,等等。
发布于 2016-09-02 16:24:19
这是一个肮脏的解决方案,但将概述如何开始:
var i = 1;
var elemSum = 0;
var elemCount = 0;
db.a.aggregate([{
$group : {
_id : {
year : {
$year : "$Mnt"
},
month : {
$month : "$Mnt"
}
},
avg : {
$avg : "$Score"
},
elemCount : {
$sum : 1
},
elemSum : {
$sum : "$Score"
}
}
}, {
$sort : {
"_id.year" : -1,
"_id.month" : -1
}
},
{
$limit : 3
}, // first 3 records
]).forEach(function (doc) {
elemSum += doc.elemSum;
elemCount += doc.elemCount;
var result = elemSum / elemCount;
var x = "M" + i.toString() + ": ";
print(x + result.toString());
i++;
})我将月份字段转换为iso time
db.a.insert([
{_id: 1, Mnt: new ISODate("2016-05-01T15:44:00.255Z"), Score: 85},
{_id: 2, Mnt: new ISODate("2016-05-01T15:44:00.255Z"), Score: 85},
{_id: 3, Mnt: new ISODate("2016-03-01T15:44:00.255Z"), Score: 80},
{_id: 4, Mnt: new ISODate("2016-03-01T15:44:00.255Z"), Score: 80},
{_id: 5, Mnt: new ISODate("2016-03-01T15:44:00.255Z"), Score: 80},
{_id: 6, Mnt: new ISODate("2016-01-01T15:44:00.255Z"), Score: 75}
])发布于 2016-09-03 20:19:23
工作代码-计算运行12个月和当前月份的净启动程序分数:
db.Collection.aggregate(
// Pipeline
// Stage 1
{
$project: {
ID: "$ID",
Mnt: "$Mnt",
CntryReg: "$CntryReg",
Prom: "$Prom",
}
},
// Stage 2
{
$group: {
_id: '$Mnt',
docs: {
$push: {
Mnt: "$Mnt",
CntryReg: "$CntryReg",
Prom: "$Prom"
}}
}
},
// Stage 3
{
$sort: {
_id: -1
}
},
// Stage 4
{
$limit: 12
},
// Stage 5
{
$group: {
"_id": null,
"values": { "$push": "$docs" }
}
},
// Stage 6
{
$unwind: {
"path": "$values", "includeArrayIndex": "rank"
}
},
// Stage 7
{
$unwind: "$values"
},
// Stage 8
{
$project: {
_id: 0,
Mnt: "$values.Mnt",
CntryReg: "$values.CntryReg",
Prom: "$values.Prom",
rank: "$rank"
}
},
// Stage 9
{
$group: {
_id: {CntryReg:"$CntryReg"} ,
AR12: { $sum: { $cond : [{ $eq : ["$Prom", "D"]}, 1, 0]} },
Ind12: { $sum: { $cond : [{ $eq : ["$Prom", "I"]}, 1, 0]} },
Loy12: { $sum: { $cond : [{ $eq : ["$Prom", "P"]}, 1, 0]} },
Sum12: {$sum: 1 },
AR1: { $sum: { $cond : [{ $and : [{ $eq : ["$Prom", "D"]} , {$eq : ["$rank", 0]} ]}, 1, 0]} },
Loy1: { $sum: { $cond : [{ $and : [{ $eq : ["$Prom", "P"]} , {$eq : ["$rank", 0]} ]}, 1, 0]} },
Ind1: { $sum: { $cond : [{ $and : [{ $eq : ["$Prom", "I"]} , {$eq : ["$rank", 0]} ]}, 1, 0]} },
Sum1: { $sum: { $cond : [ { $eq : ["$rank", 0]}, 1, 0]} },https://stackoverflow.com/questions/39294041
复制相似问题