java - 如何在 MongoDB 中进行分组选择

标签 java sql mongodb mongodb-query

我是 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

拜托 friend 们,这对我有很大帮助,我从不同的来源进行了研究,但没有找到解决方案,我提前感谢你们。

最佳答案

假设你有这样的集合:

/* 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
}

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

关于java - 如何在 MongoDB 中进行分组选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48214655/

相关文章:

node.js - 无法使用基于 mongo 的 session 存储

sql - MySQL 多表计数查询

sql - 如何在 Oracle SQL 中用 JOIN 替换 IN 子句?

ruby - 如何在 Ruby 中直接触发原始 MongoDB 查询

MongoDB 删除返回 nRemoved 0

c# - Nhibernate 转义 linq 查询中的特殊字符

java - java 1.8下无法启动eclipse

java - 从java对象实例生成XSD的框架

java - 基于packagewise在Maven中创建jar文件

java - 将集合转换为 map