
大概有这样的数据
[{ "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 年 5 月 23 日 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 } } ]) |