首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB组聚合查询中的日、周、月和年的多个累加器

MongoDB组聚合查询中的日、周、月和年的多个累加器
EN

Stack Overflow用户
提问于 2019-11-18 04:04:15
回答 1查看 716关注 0票数 1

我正试着把我的数据按天分组--每周一次,每月一次,每年一次。我有日期,星期数,月和年在不同的字段。但我无法弄清楚如何在单个流中进行组聚合。以下是json样本:

代码语言:javascript
复制
{ 
    "Ctrans" : {
    "status" : "active"
    }, 
    "Day-month" : "25-9", 
    "Month" : 9, 
    "Year" : 2019, 
    "Week" : 38
} 

我对这个管道的查询:

代码语言:javascript
复制
db.getCollection("transaction").aggregate(
    [
        { 
            "$lookup" : {
                "from" : "customer", 
                "localField" : "pB.phone", 
                "foreignField" : "phone", 
                "as" : "Ctrans"
            }
        }, 
        { 
            "$unwind" : {
                "path" : "$Ctrans", 
                "includeArrayIndex" : "arrayIndex", 
                "preserveNullAndEmptyArrays" : false
            }
        }, 
        { 
            "$project" : {
                "date" : {
                    "$dateFromString" : {
                        "dateString" : "$createdAt", 
                        "onError" : "$date"
                    }
                }, 
                "Weekdate" : {
                    "$dateFromString" : {
                        "dateString" : "$createdAt", 
                        "onError" : "$date"
                    }
                }, 
                "Ctrans.status" : 1.0, 
                "createdAt" : 1.0
            }
        }, 
        { 
            "$project" : {
                "date" : {
                    "$dateToParts" : {
                        "date" : "$date"
                    }
                }, 
                "week" : {
                    "$week" : "$Weekdate"
                }, 
                "Ctrans.status" : 1.0
            }
        }, 
        { 
            "$project" : {
                "Day-month" : {
                    "$concat" : [
                        {
                            "$toString" : "$date.day"
                        }, 
                        "-", 
                        {
                            "$toString" : "$date.month"
                        }
                    ]
                }, 
                "Month" : "$date.month", 
                "Year" : "$date.year", 
                "Week" : "$week", 
                "Ctrans.status" : 1.0
            }
        }, 
        { 
            "$group" : {
                "_id" : {
                    "Today" : "$Day-month", 
                    "Status" : "$status"
                }, 
                "Total" : {
                    "$sum" : 1.0
                }
            }
        }
    ], 
    { 
        "allowDiskUse" : false
    }
);

我的目标是用:(Day-month, status),(month,status),(year,status),(week,status)对分组进行分组,并分别得到每个配对组的计数

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-18 05:00:21

可以使用$facet对数据集应用单独的$group阶段,尝试:

代码语言:javascript
复制
db.collection.aggregate([
    // current aggregation stages,
    {
        $facet: {
            "dayMonthStatus": [
                { $group: { _id: { status: "$Ctrans.status", "dayMonth": "$Day-month" }, count: { $sum: 1 } } }
            ],
            "monthStatus": [
                { $group: { _id: { status: "$Ctrans.status", "month": "$Month" }, count: { $sum: 1 } } }
            ],
            "yearStatus": [
                { $group: { _id: { status: "$Ctrans.status", "year": "$Year" }, count: { $sum: 1 } } }
            ],
            "weekStatus": [
                { $group: { _id: { status: "$Ctrans.status", "week": "$Week" }, count: { $sum: 1 } } }
            ]
        }
    }
])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58907845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档