Mongodb Mongo中的聚合和分组
如何在Mongo中获得摘要计数。我有以下记录结构,我想按日期和状态获得摘要Mongodb Mongo中的聚合和分组,mongodb,Mongodb,如何在Mongo中获得摘要计数。我有以下记录结构,我想按日期和状态获得摘要 { "_id": "1", "History": [ { "id": "11", "message": "", "status": "send", "resultCount": 0, "createdDate": "", "modifiedDate": "" }, { "id": "21", "
{
"_id": "1",
"History": [
{
"id": "11",
"message": "",
"status": "send",
"resultCount": 0,
"createdDate": "",
"modifiedDate": ""
},
{
"id": "21",
"message": "",
"status": "skipped",
"resultCount": 0,
"createdDate": "",
"modifiedDate": ""
}
]
}
这就是我想要的
date x
status :
count : nn
这是我的Mongo结构假设您在“历史”集合中有以下数据:
{
"_id": "1",
"History": [
{
"id": "21",
"message": "",
"status": "send",
"resultCount": 0,
"createdDate": "date1",
"modifiedDate": ""
},
{
"id": "22",
"message": "",
"status": "skipped",
"resultCount": 0,
"createdDate": "date1",
"modifiedDate": ""
},
{
"id": "23",
"message": "",
"status": "skipped",
"resultCount": 0,
"createdDate": "date2",
"modifiedDate": ""
},
{
"id": "24",
"message": "",
"status": "skipped",
"resultCount": 0,
"createdDate": "date2",
"modifiedDate": ""
}
]
}
您可以按照以下方式设计查询以获得所需的摘要
db.history.aggregate([
{
$unwind:"$History"
},
{
$group:{
"_id":{
"createdDate":"$History.createdDate",
"status":"$History.status"
},
"createdDate":{
$first: "$History.createdDate"
},
"status":{
$first:"$History.status"
},
"count":{
$sum:1
}
}
},
{
$group:{
"_id":"$createdDate",
"createdDate":{
$first:"$createdDate"
},
"info":{
$push:{
"status":"$status",
"count":"$count"
}
}
}
},
{
$project:{
"_id":0
}
}
]).pretty()
这将导致以下结果:
{
"createdDate" : "date1",
"info" : [
{
"status" : "skipped",
"count" : 1
},
{
"status" : "send",
"count" : 1
}
]
}
{
"createdDate" : "date2",
"info" : [
{
"status" : "skipped",
"count" : 2
}
]
}
聚合阶段详细信息:
- 第一阶段:“历史”数组是无意的,即数组将被拆分,每个元素将创建一个单独的文档
- 第二阶段:根据“createdDate”和“status”对数据进行分组。在此阶段,还将计算状态计数
- 第三阶段:数据在“createdDate”的基础上进一步分组 只有
- 第四阶段:从结果中删除非必填字段