【问题标题】:How to make a select with grouping in MongoDB如何在 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 列也没有聚合

标签: java sql mongodb mongodb-query


【解决方案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.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 2022-11-13
  • 1970-01-01
  • 2010-10-26
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多