如何在 MongoDB 中进行分组选择

Posted

技术标签:

【中文标题】如何在 MongoDB 中进行分组选择【英文标题】:How to make a select with grouping in MongoDB 【发布时间】:2018-01-11 19:38:36 【问题描述】:

我是 mongo 的新手,我尝试获取身份文件给出的组,sql 中的等价物将具有以下形式:

SELECT fecIni, idc , cic 
from db.cllAuditoria 
WHERE fecIni BETWEEN '2017-07-01T05:00:00.000Z' AND '2017-07-31T05:00:00.000Z' 
group by idc , cic

请朋友们,这对我有很大帮助,我从不同的来源进行了研究,但没有提出解决方案,我提前谢谢你。

【问题讨论】:

你能发布一个示例文档和预期的输出吗?您的 SQL 中的 fecIni 列也没有聚合 【参考方案1】:

假设你有这样的集合:

/* 1 */

    "_id" : ObjectId("5a58dafe1aadbcd8ae74572e"),
    "fecIni" : ISODate("2017-07-30T05:00:00.000Z"),
    "idc" : "idc 1",
    "cic" : "cic 1"


/* 2 */

    "_id" : ObjectId("5a58dc3a1aadbcd8ae745758"),
    "fecIni" : ISODate("2017-07-29T05:00:00.000Z"),
    "idc" : "idc 1",
    "cic" : "cic 1"


/* 3 */

    "_id" : ObjectId("5a58dc671aadbcd8ae74575e"),
    "fecIni" : ISODate("2017-07-28T05:00:00.000Z"),
    "idc" : "idc 1",
    "cic" : "cic 2"

按idc分组,cic字段可以通过查询进行:

db.cllAuditoria.aggregate([ 
     
        $match :  
                fecIni: 
                    $gte: ISODate("2017-07-01T05:00:00.000Z"),
                    $lte: ISODate("2017-07-31T05:00:00.000Z")
                
        
    ,
     $group :  _id :  "idc": "$idc", "cic" : "$cic"  
]);

结果看起来:

/* 1 */

    "_id" : 
        "idc" : "idc 1",
        "cic" : "cic 2"
    


/* 2 */

    "_id" : 
        "idc" : "idc 1",
        "cic" : "cic 1"
    

如果你想统计分组中的项目:

db.cllAuditoria.aggregate([ 
     
        $match :  
                fecIni: 
                    $gte: ISODate("2017-07-01T05:00:00.000Z"),
                    $lte: ISODate("2017-07-31T05:00:00.000Z")
                
        
    ,
     $group :  
        _id :  "idc": "$idc", "cic" : "$cic",
        count:  $sum: 1  
     
]);    

结果:

/* 1 */

    "_id" : 
        "idc" : "idc 1",
        "cic" : "cic 2"
    ,
    "count" : 1.0


/* 2 */

    "_id" : 
        "idc" : "idc 1",
        "cic" : "cic 1"
    ,
    "count" : 2.0

希望对您有所帮助。如果您的数据不同,请提供收集示例以及您希望得到的结果。

【讨论】:

Muchas gracias amigo por compartir tu experiencia, ahora mismo iré a la aplicación con tu solución.

以上是关于如何在 MongoDB 中进行分组选择的主要内容,如果未能解决你的问题,请参考以下文章

如何在数组的 mongodb 的子字段中进行聚合和分组?

如何在使用 MongoTemplate 进行分组期间对 mongodb 内部字段求和并推送它

如何对 MongoDB 中数组内的字段值进行分组?

如何在mongodb querybuilder中“分组”字段“计数”?

如何在mongodb querybuilder中“分组”字段“计数”?

如何根据从 objectId 中提取的创建日期对 MongoDB 集合进行分组?