Mongodb mongo汇总和月回报结果
我有这个Mongodb mongo汇总和月回报结果,mongodb,meteor,aggregation-framework,Mongodb,Meteor,Aggregation Framework,我有这个 $group: { '_id': this.userId, 'hours': { $sum: '$hours' }, 'magazines': { $sum: '$magazines' }, 'brochures': { $sum: '$brochures' }, 'books': {
$group: {
'_id': this.userId,
'hours': {
$sum: '$hours'
},
'magazines': {
$sum: '$magazines'
},
'brochures': {
$sum: '$brochures'
},
'books': {
$sum: 'books'
}
}
}, {
$project: {
hours: '$hours',
magazines: '$magazines',
brochures: '$brochures',
books: '$books'
}
。。。返回上述字段的总和
我想做的是,返回特定用户的总小时数,以月份为单位
比如:
January:
userId:
hours: 10
magazines: 10
....
February:
userId:
hours:2
magazines: 2
etc
使用以下聚合管道,使用和获得每个用户按月份分组的给定属性的总和:
var pipeline = [
{
"$group": {
"_id": {
"userId": "$userId"
"year": { "$year": "$date" }
"month" { "$month": "$date" }
},
'hours': {
$sum: '$hours'
},
'magazines': {
$sum: '$magazines'
},
'brochures': {
$sum: '$brochures'
},
'books': {
$sum: 'books'
}
]
}
]
db.collection.aggregate(pipeline);
要获得将月份和用户ID值转换为键的确切模式,请使用方法返回的光标中的方法:
var result = db.collection.aggregate(pipeline).map(function (doc){
var obj = {};
obj[doc._id.month][doc._id.userId]["hours"] = doc.hours;
obj[doc._id.month][doc._id.userId]["magazines"] = doc.magazines;
obj[doc._id.month][doc._id.userId]["brochures"] = doc.brochures;
obj[doc._id.month][doc._id.userId]["books"] = doc.books;
return obj;
});
printjson(result);
这是有效的解决方案。答复:
使用mongo的日期运算符。将日期分为月份,然后按
userId
和month
分组。谢谢。我很快就会试试。你的解决方案对我不起作用。我在下面贴了一个实际有效的
[{
$group: {
_id: {
$month: "$createdAt"
},
hours: {
$sum: "$hours",
},
magazines: {
$sum: "$magazines"
},
brochures: {
$sum: "$brochures"
},
books: {
$sum: "$books"
}
}
}]