mongodb进阶聚合查询各种写法

mongodb聚合sql写法

1、聚合查询配上分页加排序

DBQuery.shellBatchSize = 30000
db.getCollection('svOrderRecordMo').aggregate([
{$match:{"actionType":9}},
{$group:{_id:"$svOrderId",total:{"$sum":1}}},
{$sort:{"createTime":1}},
{$skip:0},
{$limit:100}
])

2、在1的聚合查询基础上进行match过滤(过滤出total>1的数据)

DBQuery.shellBatchSize = 30000
db.getCollection('svOrderRecordMo').aggregate([
{$match:{"actionType":9}},
{$group:{_id:"$svOrderId",total:{"$sum":1}}},
{$match:{"total":{"$gt":1}}},
{$sort:{"createTime":1}},
{$skip:0},
{$limit:3000}
])

3、聚合查询时间范围并把Date的日期格式转成字符串(yyyyMMdd)然后聚合查询

db.getCollection('svRegisterRecordMo').aggregate([
  {$match:{"$and":[{"createTime":{"$gte":ISODate("2023-01-01T00:00:00.000+08:00")}}
    ,{"createTime":{"$lte":ISODate("2023-07-02T00:00:00.000+08:00")}}]   }},

  {
    $project: {
      convertedDate: {
        $dateToString: {
          format: "%Y%m%d",
          date: "$createTime"
        }
      }
    }
  },

  {
    $group: {
      _id: "$convertedDate",
      count: { $sum: 1 }
    }
  }
])

4、排序,聚合,sum求和同时应用

db.getCollection('reportAgentMo').aggregate([
{$match:{"dataType":"1.1","reportType":1,"platformType":2,"reportDate":{"$in":["2023-01-25","2023-02-25","2023-03-25","2023-04-25","2023-05-25","2023-06-25","2023-07-25","2023-08-25"]}}},
{$group:{_id:"$agentId",total:{"$sum":"$issuePercent"}}},
{$sort:{"total":-1}},
{$limit:10}
])

5、聚合对两字段求和,并把两个求和的值相除然后排序

db.getCollection('reportAgentMo').aggregate([
{$match:{"dataType":"1.1","reportType":1,"platformType":2,
    "reportDate":{"$in":["2023-01-25","2023-02-25","2023-03-25","2023-04-25","2023-05-25","2023-06-25","2023-07-25","2023-08-25"]}}},
{$group:{_id:"$agentId",total1:{"$sum":"$issueNum"},total2:{"$sum":"$svNum"}}},
{$match:{total2:{"$gt":0}}},
{$project:{_id:1,aver:{"$divide":["$total1","$total2"]}}},
{$sort:{aver:-1}},
{$limit:11}
])

6、聚合时使用$first关键字(根据customTextAnswer.text聚合,并获取第一条数据)

db.getCollection('orderExtraInfoMo').aggregate([
{$match:{"topic":"家庭年收入"
    ,"customTextAnswer.number":{"$ne":null}}},
{$group:{_id:"$customTextAnswer.text",svOrderId:{"$first":"$svOrderId"},"number":{"$first":"$customTextAnswer.number"}}},
{$sort:{"svOrderId":-1}},
{$skip:0},
{$limit:10000}
])

7、对targetValue字段进行聚合统计,key是cId

db.getCollection("channelTargetMo").aggregate([
{$match:{"targetDate":{"$gte":"2022-08-03"},"targetDate":{"$lte":"2022-09-02"},"targetDateType":"day","targetType":"deal_sv","cIdType":"subId","cId":"62eb25c3b6d6033cb3fd9174"}},
{$group:{_id:"$cId",total:{"$sum":"$targetValue"}}}
]);

8、mongodb的两表关联查询
如下所示:左表是reportCustDealInfoMo,右表是reportCustDataMo,连接条件是reportCustDealInfoMo.custId=reportCustDataMo.cId。因为默认是1对多 情况,所以aa是一个数组,
$unwind 是把aa数组展开

db.reportCustDealInfoMo.aggregate([
{
$match:{"isDeleted":false,"isDeal":true}
},

  {
    $lookup: {
      from: "reportCustDataMo",
      localField: "custId",
      foreignField: "cId",
      as: "aa"
    }
  },
  {
    $unwind: "$aa" 
  },

    {
    $match: {
      "aa.cIdType": "custId",
      "aa.reportType": "year",
      "aa.reportDate":"2021"
    }
  },
      {$group:{_id:null,
        
        dealInternetAmount:{"$sum":"$aa.dealInternetAmount"},
dealHighCriterionAmount:{"$sum":"$aa.dealHighCriterionAmount"},
dealCarCriterionAmount:{"$sum":"$aa.dealCarCriterionAmount"},
dealGroupCriterionAmount:{"$sum":"$aa.dealGroupCriterionAmount"},
dealLifeCriterionAmount:{"$sum":"$aa.dealLifeCriterionAmount"},
underwriteCdCriterionAmount:{"$sum":"$aa.underwriteCdCriterionAmount"}
    }}
    ,
    {$project:{
        dealInternetAmount:1,
        dealHighCriterionAmount:1,
        dealCarCriterionAmount:1,
        dealGroupCriterionAmount:1,
        dealLifeCriterionAmount:1,
	underwriteCdCriterionAmount:1,
        totalStaAmount:{"$add":["$dealInternetAmount","$dealHighCriterionAmount","$dealCarCriterionAmount","$dealGroupCriterionAmount","$dealLifeCriterionAmount"]}}}
])

相关推荐

  1. mongodb聚合查询各种写法

    2024-03-21 07:46:01       21 阅读
  2. MongoDB【四】查询聚合框架

    2024-03-21 07:46:01       12 阅读
  3. MongoDB 聚合查询在数据统计中的应用

    2024-03-21 07:46:01       31 阅读
  4. FastAPI+React全栈开发10 MongoDB聚合查询

    2024-03-21 07:46:01       20 阅读
  5. 数据库-新手笔记(聚合函数,分组)-

    2024-03-21 07:46:01       17 阅读
  6. SQL:多表查询

    2024-03-21 07:46:01       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-21 07:46:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-21 07:46:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-21 07:46:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-21 07:46:01       20 阅读

热门阅读

  1. 多数据源 - dynamic-datasource | 事务支持

    2024-03-21 07:46:01       22 阅读
  2. 面试常问问题

    2024-03-21 07:46:01       18 阅读
  3. 洛谷P6866 [COCI2019-2020#5] Emacs

    2024-03-21 07:46:01       19 阅读
  4. gitee上传存储文件、下载文件

    2024-03-21 07:46:01       20 阅读
  5. 开源IT自动化运维工具Ansible Playbook介绍

    2024-03-21 07:46:01       20 阅读
  6. OpenCV特征检测与描述符模块

    2024-03-21 07:46:01       20 阅读
  7. C++_opencv中图像深度、通道和对应数据类型

    2024-03-21 07:46:01       19 阅读
  8. 【MySql】SQLite和MySQL的区别

    2024-03-21 07:46:01       19 阅读
  9. AWS Sagemaker详解

    2024-03-21 07:46:01       17 阅读
  10. Hive面试重点

    2024-03-21 07:46:01       22 阅读
  11. Hive自定义UDF函数

    2024-03-21 07:46:01       19 阅读
  12. 【面试自测】Spring

    2024-03-21 07:46:01       20 阅读
  13. python實現excel轉txt代碼

    2024-03-21 07:46:01       21 阅读
  14. SpringMVC

    SpringMVC

    2024-03-21 07:46:01      17 阅读
  15. 无人机拦截

    2024-03-21 07:46:01       19 阅读