aqtata
V2EX  ›  MongoDB

请教一个查询统计的语句

By aqtata at 2022 年 1 月 5 日 · 2838 次点击

大概有这样的数据

[{
	"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 条回复  •  2023-05-23 11:43:43 +08:00
mayunyi
   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 }
}
])
推荐工具
› RoboMongo
推荐书目
› 50 Tips and Tricks for MongoDB Developers
Related Blogs
› Snail in a Turtleneck
© 2026 V2EX · 29ms · 3.9.8.5