美文网首页mongodb
mongo聚合查询

mongo聚合查询

作者: freedom117 | 来源:发表于2022-04-28 10:45 被阅读0次

    1.概述

    MongoDB 聚合框架(Aggregation Framework)是一个计算框架,它可以:
    • 作用在一个或几个集合上;
    • 对集合中的数据进行的一系列运算;
    • 将这些数据转化为期望的形式;
    ● 从效果而言,聚合框架相当于 SQL 查询中的:
    • GROUP BY
    • LEFT OUTER JOIN
    • AS等

    2.管道

    管道(Pipeline)和步骤(Stage) ● 整个聚合运算过程称为管道(Pipeline),它是由多个步骤(Stage)组成的,
    每个管道:
    • 接受一系列文档(原始数据);
    • 每个步骤对这些文档进行一系列运算;
    • 结果文档输出给下一个步骤;

    $match 过滤 WHERE
    $project 投影 AS
    $sort 排序 ORDER BY
    $group 分组 GROUP BY
    $skip/$limit 结果限制 SKIP/LIMIT
    $lookup 左外连接 LEFT OUTER JOIN
    $unwind 展开数组 N/A
    $graphLookup 图搜索 N/A
    $facet/$bucket 分面搜索 N/A
    

    例子 mysql

    SELECT
    FIRST_NAME AS `名`,
    LAST_NAME AS `姓`
    FROM Users
    WHERE GENDER = '男'
    SKIP 100
    LIMIT 20
    
    SELECT DEPARTMENT,
    COUNT(NULL) AS EMP_QTY
    FROM Users
    WHERE GENDER = '女'
    GROUP BY DEPARTMENT HAVING
    COUNT(*) < 10
    

    mongo

    db.users.aggregate([
    {$match: {gender: ’’男”}}, {$skip: 100}, {$limit: 20}, {$project: {'名': '$first_name', '姓': '$last_name'
    }}
    ]);
    
    db.users.aggregate([
    {$match: {gender: '女'}}, {$group: { _id: '$DEPARTMENT’,
    emp_qty: {$sum: 1}
    }}, {$match: {emp_qty: {$lt: 10}}}
    ]);
    

    3.具体实例

    1.利用聚合查询来计算总销售额

    db.orders.aggregate([
    {$group:{
            _id:null,//用null将所有数据分到同一组,实现对全部数据的操作。
            total:{$sum: "$total"}
        }
      }
    ])
    

    2.利用聚合查询来计算订单金额汇总

    db.orders.aggregate([ 
    // 步骤1:匹配条件
    { $match: { status: "completed", orderDate: { 
    $gte: ISODate("2019-01-01"), 
    $lt: ISODate("2019-04-01") } } },
    // 步骤二:聚合订单总金额、总运费、总数量
    { $group: { 
    _id: null, 
    total: { $sum: "$total" }, 
    shippingFee: { $sum: "$shippingFee" }, 
    count: { $sum: 1 } } },
    { $project: {
    // 计算总金额
    grandTotal: { $add: ["$total", "$shippingFee"] }, 
    count: 1,
    _id: 0 } } 
    ])
    

    5.通过 Compass 可以更加直观的来创建复杂的聚合计算管道

    image.png
    image.png

    直接用Compass 生成java代码简单可靠。

    相关文章

      网友评论

        本文标题:mongo聚合查询

        本文链接:https://www.haomeiwen.com/subject/qizsrltx.html