1.原始数据


2.需求

1.按条件获取所有停机原因及对应的停机时长数据

2.按条件获取指定停机类型下的停机原因及停机时长

3.操作

3.1 获取所有停机原因及时长

db.stop_reason_duration_daily_data.aggregate([{'$match': {"timestamp": {"$gte": ISODate("2020-10-01T00:00:00.000+0000"), "$lt": ISODate("2020-12-24T00:00:00.000+0000")},}},{'$unwind': '$reason_detail_res'},{'$group': {'_id': '$reason_detail_res.name','count': {'$sum': '$reason_detail_res.value'},}},{'$project': {'_id': 0,'name': '$_id','value': '$count'}}])

3.2 指定停机分类或停机类型下的停机原因及时长

db.stop_reason_duration_daily_data.aggregate([{'$match': {"timestamp": {"$gte": ISODate("2020-10-01T00:00:00.000+0000"), "$lt": ISODate("2020-12-24T00:00:00.000+0000")},}},{'$unwind': '$reason_detail_res'},{'$match': {'reason_detail_res.reason_class': '速度损失', 'reason_detail_res.shut_down_type': '计划外停机'}},  # 此处用来过滤指定停机分类或停机类型{'$group': {'_id': '$reason_detail_res.name','count': {'$sum': '$reason_detail_res.value'},}},{'$project': {'_id': 0,'name': '$_id','value': '$count'}}])

4.$unwind 拆解数组字段

4.1 定义

  • 定义 field版
{ $unwind: <field path> }
  • 定义document版
{$unwind:{path: <field path>,includeArrayIndex: <string>,preserveNullAndEmptyArrays: <boolean>}
}

path 你要打散的字段
includeArrayIndex,可选的。一个新字段的名称,用于保存元素的数组索引。名称不能以美元符号开头。
preserveNullAndEmptyArrays,可选的。如果为true,则如果path为null,缺失或空数组,则$unwind输出文档。如果为false,如果path为null,缺少或为空数组,$unwind则不会输出文档。默认值为false。

4.2 示例:

  • 原始数据
db.inventory.insertOne({ "_id" : 1, "item" : "ABC1", sizes: [ "S", "M", "L"] })
  • 拆分数组
db.inventory.aggregate( [ { $unwind : "$sizes" } ] )
  • 拆分结果
{ "_id" : 1, "item" : "ABC1", "sizes" : "S" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "M" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "L" }

参考:https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/

mongo聚合操作符$unwind相关推荐

  1. Mongo 聚合框架-Aggregate(一)

    一 概念 1.简介 使用聚合框架可以对集合中的文档进行变换和组合.可以用多个构件创建一个管道,用于对一连串的文档进行处理.构件有:筛选.投射.分组.排序.限制和跳过. MongoDB的聚合管道将Mon ...

  2. Mongo聚合函数使用Sort排序时内存不足导致查询失败,开启allowDiskUse=true

    目录 1.问题描述 2.问题解决 1. Java代码方式解决办法 2. Mongo 原生聚合函数解决办法 1.问题描述 由于项目原因, 需要向数据存储至mongo,在使用过程中 , 单个documen ...

  3. 【mongoDB实战】聚合管道--$unwind

      $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值. 在做项目的时候碰上了这样的需求: 实例讲解: {"_id" : ObjectId(" ...

  4. mongo java aggregate_java使用spring + mongo进行Aggregation聚合查询

    笔记:使用mongo聚合查询(一开始根本没接触过mongo,一点一点慢慢的查资料完成了工作需求) 需求:在订单表中,根据buyerNick分组,统计每个buyerNick的电话.地址.支付总金额以及总 ...

  5. mongodb聚合查询-aggregate

    Mongodb-aggregate 在工作中经常遇到一些mongodb的聚合操作,和mysql对比起来,mongo存储的可以是复杂的类型,比如数组,字典等mysql不善于处理的文档型结构,但是mong ...

  6. mongodb高级聚合查询

    在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysql复杂很多. 注:本文基于 mo ...

  7. MongoDB聚合查询 Pipeline 和 MapReduce

    MongoDB聚合查询 MongoDB聚合查询 什么是聚合查询 Pipeline聚合管道方法 聚合流程 详细流程 聚合语法 常用聚合管道 $count $group $match $unwind $p ...

  8. mongodb-18.聚合查询练习1

    文章目录 bulk write addFields 增加field 嵌套增加field 覆盖显示 用变量替换 向数组中增加元素 分组 bucket 并行执行多个bucket $bucketAuto $ ...

  9. mongodb aggregate $unwind

    首先了解一下这个单词啥意思,知道的就不说了,不知道的咱先了解一下. 那么mongo的这个 $unwind 命令的作用:拆分(unwind)可以将数组中的每一个值拆分为单独的文档. 示范一下怎么拆分 先 ...

最新文章

  1. win7 64位安装mysql教程视频_64位Win7系统安装Mysql 5.7.22图文教程
  2. matlab参考答案2011至诚,职高数学试卷答卷答案详解
  3. BIM+GIS应用实战(听课笔记)
  4. Android studio Error occurred during initialization of VM 问题解决
  5. 在vue项目中添加特殊字体
  6. MySQL 锁(行锁、表锁、页锁、乐观锁、悲观锁等)
  7. 读书笔记:《穷查理宝典》
  8. STM32——软件SPI控制AD7705
  9. nRF51822 DTM 测试 不能连续发送数据
  10. python 切片步长_python 索引+切片+步长
  11. 阿里巴巴sentinel限流
  12. 关于安装Spacy以及de和en模块遇到的坑---附最终解决方案
  13. 新职业人工智能工程师要学哪些内容?
  14. getTime()获取时间戳方法与时区有关
  15. python 头条号_python爬取今日头条收藏目录
  16. 2019 年第 13 周 DApp 影响力排行榜 | TokenInsight
  17. 计算机网络工程这专业都学什么,我是学计算机网络工程专业的,我想问一下我以后可以从事哪些方面的工作呀...
  18. 简单了解APP黑暗模式
  19. English Learning - Day23 作业打卡 2022.12.29 周四
  20. sybase数据库环境搭建教程

热门文章

  1. Windows常用command line操作
  2. AWS攻防 | 利用DNS技术突破AWS隔离网络限制进行数据渗漏
  3. 晓庄学院计算机音乐,南京晓庄学院音乐学院新媒体时代高校音乐课程的改革与创新...
  4. HashSet和LinkedHashSet
  5. cordova+vue使用插件cordova-plugin-qrscanner自定义扫码页面
  6. 太鸡冻了!我用Python偷偷查到暗恋女生的名字
  7. U盘启动各种模式间的区别
  8. Linux CentOS7 VMware正则介绍、grep工具、egrep表达式
  9. vue.js elementUI 表格实现隔行变色,自己定义颜色。(斑马纹表格颜色设置,使两种不同的颜色间隔出现)
  10. 怎么压缩图片大小到指定kb?如何自定义图片压缩大小?