首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每月按用户对组的正确查询

问每月按用户对组的正确查询
EN

Stack Overflow用户
提问于 2014-06-30 08:54:16
回答 1查看 42关注 0票数 0

我有MongoDB集合,它以这种格式存储文档:

代码语言:javascript
复制
"name" : "Username",
"timeOfError" : ISODate("...")

我使用这个集合来跟踪谁得到了一个错误以及它发生的时间。

我现在要做的是创建一个查询,用于检索每个用户、每个月或其他类似的错误。就像这样:

代码语言:javascript
复制
{
"result": [
    {
        "_id": "$name",
        "errorsPerMonth": [
            {
                "month": "0",
                "errorsThisMonth": 10
            },
            {
                "month": "1",
                "errorsThisMonth": 20
            }
        ]
     }
   ]
}

我尝试了几个不同的查询,但没有一个给出了想要的结果。最接近的结果来自于以下查询:

代码语言:javascript
复制
db.collection.aggregate(
                  [
                    { 
                        $group: 
                        {
                            _id: { $month: "$timeOfError"},
                            name: { $push: "$name" },
                            totalErrorsThisMonth: { $sum: 1 }
                        } 
                    }
                  ] 
);

这里的问题是,$push只是为每个错误添加用户名。所以我得到了一个有重复名字的数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-30 08:58:04

您需要在_id中复合$group值

代码语言:javascript
复制
db.collection.aggregate([
    { "$group": {
        "_id": {
            "name": "$name",
            "month": { "$month": "$timeOfError" }
        },
        "totalErrors": { "$sum": 1 }
    }}
])

_id本质上是“分组键”,所以不管您想要分组的任何元素都需要成为其中的一部分。

如果您想要一个不同的顺序,那么可以更改分组键优先级:

代码语言:javascript
复制
db.collection.aggregate([
    { "$group": {
        "_id": {
            "month": { "$month": "$timeOfError" },
            "name": "$name"
        },
        "totalErrors": { "$sum": 1 }
    }}
])

或者,如果您甚至希望或在管道中有不同字段的其他条件,只需在最后添加一个$sort管道阶段:

代码语言:javascript
复制
db.collection.aggregate([
    { "$group": {
        "_id": {
            "month": { "$month": "$timeOfError" },
            "name": "$name"
        },
        "totalErrors": { "$sum": 1 }
    }},
    { "$sort": { "_id.name": 1, "_id.month": 1 } }
])

从本质上说,你可以对你想要的任何东西进行$sort。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24486311

复制
相关文章

相似问题

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