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