Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb mongo汇总和月回报结果_Mongodb_Meteor_Aggregation Framework - Fatal编程技术网

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"
            }
        }
}]