Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >开心档-软件开发入门之MongoDB 聚合

开心档-软件开发入门之MongoDB 聚合

原创
作者头像
iOS程序应用
发布于 2023-02-06 08:47:31
发布于 2023-02-06 08:47:31
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

作者简介:每天分享MongoDB教程的学习经验、和学习笔记。

座右铭:有自制力,做事有始有终;学习能力强,愿意不断地接触学习新知识。

个人主页:iOS程序应用的主页​​​​​​

前言

本章将会讲解MongoDB 聚合

MongoDB 聚合

MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。

有点类似 SQL 语句中的 count(*)。


aggregate() 方法

MongoDB中聚合的方法使用aggregate()。

语法

aggregate() 方法的基本语法格式如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

实例

集合中的数据如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
   _id: ObjectId(7df78ad8902c)
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'kxdang.com',
   url: 'http://www.kxdang.com/topic/',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   _id: ObjectId(7df78ad8902d)
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'kxdang.com',
   url: 'http://www.kxdang.com/topic/',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
},
{
   _id: ObjectId(7df78ad8902e)
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
},

现在我们通过以上集合计算每个作者所写的文章数,使用aggregate()计算结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
   "result" : [
      {
         "_id" : "kxdang.com",
         "num_tutorial" : 2
      },
      {
         "_id" : "Neo4j",
         "num_tutorial" : 1
      }
   ],
   "ok" : 1
}
>

以上实例类似sql语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 select by_user, count(*) from mycol group by by_user

在上面的例子中,我们通过字段 by_user 字段对数据进行分组,并计算 by_user 字段相同值的总和。

下表展示了一些聚合的表达式:

表达式

描述

实例

$sum

计算总和。

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])

$avg

计算平均值

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])

$min

获取集合中所有文档对应值得最小值。

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])

$max

获取集合中所有文档对应值得最大值。

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])

$push

将值加入一个数组中,不会判断是否有重复的值。

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])

$addToSet

将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])

$first

根据资源文档的排序获取第一个文档数据。

db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])

$last

根据资源文档的排序获取最后一个文档数据

db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])


管道的概念

管道在UnixLinux中一般用于将当前命令的输出结果作为下一个命令的参数。

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

这里我们介绍一下聚合框架中常用的几个操作:

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。

管道操作符实例

1、$project实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );

这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});

2.$match实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );

$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。

3.$skip实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.article.aggregate(
    { $skip : 5 });

经过$skip管道操作符处理后,前五个文档被"过滤"掉。

上一篇

MongoDB 高级索引

下一篇

MongoDB 查询分析

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
FeTA2024——胎儿组织分割和生物测量
先天性疾病是全球婴儿死亡的主要原因之一。胎儿脑部宫内 MRI 已开始成为研究先天性疾病胎儿神经发育的宝贵工具。胎儿 MRI 有助于未来开发临床风险分层工具,用于早期干预、治疗和临床咨询。此外,胎儿 MRI 是描绘人类妊娠期间复杂神经发育事件的有力工具,这些事件仍有待完全表征。获取和分析胎儿脑部宫内 MRI 需要专业临床中心的合作,因为这些脆弱患者群体的图像队列很小且异质性(例如,不同站点之间的图像采集参数存在差异)。在大多数使用胎儿 MRI 的专业临床中心,评估仅使用从厚 2D 切片采集中获得的 2D 生物特征测量值进行,尽管最近的研究已经证明了在 3D 超分辨率重建体积中执行这些测量的能力。在 MRI 数据中,对出生前高度复杂且快速变化的大脑形态进行自动生物测量、分割和量化将改善诊断过程,因为手动注释既耗时又容易出现人为错误和评分者间差异。分析发育中的大脑结构的形状或体积等信息具有临床意义,因为许多先天性疾病会导致这些组织区室发生细微变化。现有的生长数据主要基于正常发育的大脑,缺乏许多病理和先天性疾病的生长数据。因此,跨不同扫描仪和图像采集协议自动量化发育中的人脑的稳健方法将是执行此类分析的第一步。从技术角度来看,胎儿大脑的自动分割方法需要克服许多挑战。在胎儿发育过程中,人脑的生理学会发生变化,同时其结构也会经历发育重组。此外,由于胎儿和母亲的运动以及成像伪影,图像质量通常较差 ,而部分容积效应经常导致组织之间边界模糊。最后,与健康对照组相比,异常胎儿大脑的结构通常具有不同的形态。这使得自动方法很难识别这些结构。到目前为止,由于成像方面的挑战以及缺乏公开、精选和带注释的真实数据,胎儿 MRI 领域的研究不足。为了增加样本量,使这些研究具有足够的功效,需要协调场地和 MRI 扫描仪,并结合自动化和强大的 MRI 分析方法。
医学处理分析专家
2024/06/05
3110
FeTA2024——胎儿组织分割和生物测量
AutoPet2022——全身PET/CT病灶分割挑战赛
今天将分享全身PET/CT病灶分割完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
医学处理分析专家
2022/12/19
2.5K2
AutoPet2022——全身PET/CT病灶分割挑战赛
​BraTS2023-MET——BraTS2023脑转移分割挑战赛
今天将分享BraTS2023脑转移分割挑战赛完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
医学处理分析专家
2023/11/07
1.3K0
​BraTS2023-MET——BraTS2023脑转移分割挑战赛
FeTA2021——胎儿组织分割挑战
今天将分享胎儿组织分割的完整实现过程,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
医学处理分析专家
2022/08/20
6261
FeTA2021——胎儿组织分割挑战
MM-WHS2017——多模态全心脏分割挑战赛
整个心脏亚结构的准确计算、建模和分析对于临床应用的开发非常重要。然而,整个心脏图像的分割和配准具有挑战性,目前仍然严重依赖手动操作,这既费时又容易出错。挑战赛提供了 120 例在真实临床环境中采集的多模态心脏图像。它旨在为各种研究小组创建一个公开和公平的竞争,以测试和验证他们的方法,特别是对于多模态全心分割。
医学处理分析专家
2022/12/19
3.2K9
MM-WHS2017——多模态全心脏分割挑战赛
AMOS2022——多模态腹部多器官分割挑战赛
今天将分享多模态腹部多器官分割完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
医学处理分析专家
2024/02/22
7251
AMOS2022——多模态腹部多器官分割挑战赛
Circulation:胎儿脑体积预测先天性心脏病患儿的神经发育
背景:神经发育障碍在先天性心脏病(CHD)患儿中很常见,但产后变量仅能解释预后中30%的差异。为了探讨神经发育障碍是否可能开始于子宫,我们分析了胎儿脑体积是否能预测CHD儿童未来的神经发育预后。
用户1279583
2022/04/12
4530
Circulation:胎儿脑体积预测先天性心脏病患儿的神经发育
CMRxMotion2022—— 呼吸运动下心脏MRI分析挑战赛
CMR 成像质量易受呼吸运动伪影的影响。挑战赛目标是评估呼吸运动对 CMR 成像质量的影响,并检查自动分割模型在不同呼吸运动水平下的鲁棒性。心脏磁共振 (CMR) 成像是目前评估心脏结构和功能的金标准模式。基于机器学习的方法在以前的 CMR 挑战(例如 ACDC、M&Ms)中取得了显着的性能。然而,在临床实践中,模型性能受到不一致的成像环境(例如,供应商和协议)、人口变化(正常与病理病例)和意外的人类行为(例如,身体运动)的挑战。通过将训练有素的机器学习模型暴露于“压力测试”中的极端情况来调查潜在的故障模式很有用。迄今为止,模型通用性方面的现有挑战大都集中在供应商可变性和解剖结构变化上,而对人类行为的影响的探索较少。对于 CMR 采集,呼吸运动是主要问题之一。有急性症状的患者不能遵守屏气指令,导致图像质量下降和分析不准确。
医学处理分析专家
2022/12/19
1K0
CMRxMotion2022—— 呼吸运动下心脏MRI分析挑战赛
iSeg-2019——6个月婴儿多部位脑MRI分割
今天将分享6个月婴儿多部位脑MRI分割挑战赛完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
医学处理分析专家
2024/01/05
4133
iSeg-2019——6个月婴儿多部位脑MRI分割
NeuroImage:胎儿和新生儿大脑MRI自动分割
近年来,许多学者已经提出了多种分割方法来自动描绘胎儿和新生儿脑MRI。这些方法旨在定义不同粒度的感兴趣区域:大脑、组织类型或更局部的结构。不同的方法已应用于此分割任务,可分为无监督、参数化、分类、atlas融合(atlas fusion)和可变形(deformable)模型。Brain atlas通常在分割过程中用作训练数据。然而,与图像采集、快速的大脑发育以及较少可用的成像数据相关的问题阻碍了这类分割任务的发展。本文回顾了围产期(怀孕28 周到产后一周)大脑分割采用的方法,并根据目标人群、结构分割和方法类型对它们进行了分类。本文概述了文献中提出的各种方法,并讨论了它们的主要贡献。提出了评估分割精度和分割质量基准的不同方法。本文以围产期大脑分割可能存在的问题和可能的未来发展方向的讨论作为总结。
用户1279583
2020/04/16
1.6K0
NeuroImage:胎儿和新生儿大脑MRI自动分割
成果展示 | 清华大学大数据研究中心——医工结合科研创新支持计划
“医工结合科研创新支持计划”(以下简称:计划)由清华大学大数据研究中心、北京清华长庚医院和清华大学临床医学院联合发起,旨在全力推动医疗大数据与人工智能技术深度融合的科研创新。该计划重点支持的研究课题,包括健康大数据与人工智能、智能医学影像工程、精准能量外科技术等方向,研究团队均由清华大学专注数据科学技术创新的工科教授(助理教授及以上)和专注科研的学术型医生(副主任医师及以上)组成。以下内容为该计划部分成果展示:
数据派THU
2021/09/08
6950
WMHSegmentation2017——MRI白质高信号强度分割挑战赛
今天将分享MRI白质高信号强度分割挑战赛完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
医学处理分析专家
2024/01/26
3300
WMHSegmentation2017——MRI白质高信号强度分割挑战赛
Biological Psychiatry:胎儿脑网络的发展:与常见神经疾病的相关性
人类胎儿以及早产儿的磁共振成像、组织学和基因分析方法为产前大脑发育的阶段过程提供了见解。对出生前微观和宏观脑网络发育理解的增加,激发了人们对理解产前大脑发育与常见神经疾病的相关性的兴趣。关于宫内大脑对环境、可塑性窗口以及涉及大规模网络连接中断的儿童期疾病的产前起源的敏感性,存在大量的问题。许多现有的关于人类产前神经发育的文献都来自横断面或案例研究,这些研究不能解决出生前大脑发育中个体差异的纵向后果。本文将:1)详细介绍研究人类产前大脑的具体方法,2)总结人类产前神经网络的大规模发展,整合各种实验方法的研究结果,3)探索早期发育大脑的可塑性以及产前易感性的潜在性别差异,以及4)评估将特定的产前大脑发育过程与儿童常见神经系统疾病的异常神经连接形式联系起来的机会。本文发表于Biological Psychiatry杂志。
用户1279583
2022/02/28
7860
Biological Psychiatry:胎儿脑网络的发展:与常见神经疾病的相关性
BraTS2023-GLI——BraTS2023成人胶质瘤分割挑战赛
今天将分享BraTS2023成人胶质瘤分割挑战赛完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
医学处理分析专家
2023/11/14
1.6K0
BraTS2023-GLI——BraTS2023成人胶质瘤分割挑战赛
nature mental health:怀孕期间母亲积极的心理健康会影响儿童的海马体和功能网络
摘要:积极的心理健康是身体健康和幸福的重要组成部分。然而,这方面的研究相对被忽视。本研究使用纵向数据集来调查怀孕期间母亲积极情绪对7.5岁儿童大脑结构和功能的影响(n=381)。通过对26-28周问卷进行验证性因素分析,制定了积极的孕产妇心理健康衡量标准,包括怀孕期间的积极情绪和情绪健康。研究发现,怀孕期间心理健康状况较好的母亲所生的女孩,其双侧海马体更大。此外,心理健康状况良好的母亲的孩子表现出多个网络功能连接的改变,包括默认模式、显着性、执行控制、杏仁核和丘脑-海马网络。这些发现将孕产妇心理健康的研究扩展到孕产妇精神病理学之外,表明在怀孕期间促进积极的孕产妇心理健康作为后代大脑发育的潜在保护因素的重要性。
悦影科技
2024/06/27
2640
SK102010——MR膝关节结构分割挑战赛
肌肉骨骼疾病和关节疾病是发达国家的主要健康问题之一,尤其影响人口老龄化。人类膝关节通常受到骨关节炎 (OA) 的影响,骨关节炎是一种退行性疾病,是美国慢性残疾的主要原因。OA会导致关节软骨损失,目前可以使用磁共振成像(MRI)清楚地观察到这种影响。在此背景下,膝关节软骨和周围骨骼的分割是近年来变得相当重要的问题。研究的一个主要方向是利用软骨分割来开发针对骨关节炎不同阶段的生物标志物。此外,基于计算机的膝关节植入物手术规划需要骨骼和软骨的分割。其他应用包括通过有限元对膝盖进行建模,以预测关节运动学或了解健康关节的自然变化和生理效应。
医学处理分析专家
2024/01/15
7590
SK102010——MR膝关节结构分割挑战赛
CARE2024——真实世界医学图像的综合分析与计算之MyoPS++
许多用于医学图像分析的基础模型,例如分段任意模型(SAM),已经发布并被证明在多种任务中是有用的。然而,它们对现实世界医学成像数据的有效性尚未得到探索。例如,针对变形较大的器官(即心脏和肝脏)的特定图像对分析提出了更大的挑战。
医学处理分析专家
2024/07/01
3430
CARE2024——真实世界医学图像的综合分析与计算之MyoPS++
FreeSurfer自动分割海马亚区算法的重测信度分析
最近,来自波士顿荣军医疗保健系统和哈佛医学院等多个单位的研究人员,在Neuroimage杂志上发表了研究,对FreeSurfer计算海马亚区的两种方法(标准处理和纵向处理)跨站点重复测量的信度进行了评估,进一步验证该方法具有较高的信度。
用户1279583
2020/02/24
2.7K0
PNAS:机器学习揭示早产儿脑结构连接与基因变异的关系
PPARG基因与白质发育密切相关,可能调控早产儿的大脑发育。使用sRRR(基于稀疏降秩)回归模型,研究人员可以识别与PPARG基因联系较强的脑白质结构连接,从而证实以上假说。该成果由伦敦大学国王学院Michelle L. Krishnan等人发表在最近的PNAS期刊上。
用户1279583
2019/10/17
8340
汇总|医学图像数据集
http://academictorrents.com/details/80ecfefcabede760cdbdf63e38986501f7becd49
3D视觉工坊
2020/12/11
4.7K0
汇总|医学图像数据集
推荐阅读
相关推荐
FeTA2024——胎儿组织分割和生物测量
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验