V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
aqtata
V2EX  ›  MongoDB

请教一个查询统计的语句

  •  
  •   aqtata · 2022-01-05 20:08:36 +08:00 · 1638 次点击
    这是一个创建于 1037 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大概有这样的数据

    [{
    	"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-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 }
    }
    ])
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3603 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:25 · PVG 18:25 · LAX 02:25 · JFK 05:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.