大概有这样的数据
[{
"date": "20220101",
"id": "aaa",
"name": "jack"
}, {
"date": "20220101",
"id": "aaa",
"name": "tony"
}, {
"date": "20220102",
"id": "aaa",
"name": "jack1"
}, {
"date": "20220102",
"id": "aaa",
"name": "jack2"
}, {
"date": "20220102",
"id": "bbb",
"name": "jack3"
}, {
"date": "20220103",
"id": "aaa",
"name": "jack"
}]
需要按日期分组,再统计出每天的数据总数,各字段分组后的数量,期望得到这样的结果
date count id_count name_count
20220103 1 1 1
20220102 3 2 3
20220101 2 1 2
研究了下聚合查询,$group
按照date
分组后就没法统计其他字段的分组数量了。
还有个$push
可以在分组时将其他字段压入到新数组,但是其中数据是重复的,而我只是想得到分组后的数量而已。
目前是傻乎乎的查多次。可以一次查出来我期望的结果吗?
1
mayunyi 2023-05-23 11:43:43 +08:00
db.collection.aggregate([
{ $group: { _id: { date: "$date" }, count: { $sum: 1 }, id_count: { $addToSet: "$id" }, name_count: { $addToSet: "$name" } } }, { $project: { _id: 0, date: "$_id.date", count: 1, id_count: { $size: "$id_count" }, name_count: { $size: "$name_count" } } }, { $sort: { date: 1 } } ]) |