如何在 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 中进行分组选择的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 MongoTemplate 进行分组期间对 mongodb 内部字段求和并推送它
如何在mongodb querybuilder中“分组”字段“计数”?