广告
返回顶部
首页 > 资讯 > 数据库 >MongoDB 聚合管道使用
  • 764
分享到

MongoDB 聚合管道使用

MongoDB聚合管道使用 2016-11-25 13:11:39 764人浏览 才女
摘要

db.accounts.insert([{"name": {"first_name": "qingquan","last_name": "zeng"},"balance": 100},{"name": {"first_name": "fen

MongoDB 聚合管道使用

db.accounts.insert([{"name": {"first_name": "qingquan","last_name": "zeng"},"balance": 100},{"name": {"first_name": "fengxia","last_name": "yu"},"balance": 200}])

数据查询

$project

# aggregate 中的 $project 除了可以实现投影效果,还直接使用了一个不存在的字段 client_name ,相当于 mysql 中的 as 语法
> db.accounts.aggregate([{
... $project:{
... _id:0,
... balance:1,
... client_name:"$name.first_name"
... }
... }]);
{ "balance" : 100, "client_name" : "qingquan" }
{ "balance" : 200, "client_name" : "fengxia" }
# 由于 middle_name 不存在,产生的结果就为 null 了
> db.accounts.aggregate([{
... $project:{
... _id:0,
... balance:1,
... name_arr:["$name.first_name","$name.middle_name","$name.first_name"]
... }
... }]);
{ "balance" : 100, "name_arr" : [ "qingquan", null, "qingquan" ] }
{ "balance" : 200, "name_arr" : [ "fengxia", null, "fengxia" ] }

$match 中使用的文档筛选语法,和读取文档时的筛选语法相同

db.accounts.aggregate([
    {
        $match: {
            "name.first_name": "fengxia"
        }
    }
])
{ "_id" : ObjectId("5d80fd4471c6b2236fb80de9"), "name" : { "first_name" : "fengxia", "last_name" : "yu" }, "balance" : 200 }

$project$match$skip$limit 相结合

db.accounts.aggregate([
    {
        $match: {
            $or: [
                {
                    "name.first_name": "fengxia"
                },
                {
                    "name.first_name": "qingquan"
                },          
            ]
        }
    },
    {
        $project: {
            _id: 0
        }
    },
    {
        $skip: 1
    },
    {
        $limit: 1
    }
])
{ "name" : { "first_name" : "fengxia", "last_name" : "yu" }, "balance" : 200 }

$unwind 对本节的数据进行修改

db.accounts.update({"name.first_name":"qingquan"},{
 $set:{
  "currency":["CNY","USD"]
 }
})

db.accounts.update({"name.first_name":"fengxia"},{
 $set:{
  "currency":"GBP"
 }
})

修改后的数据如下,一个用户的currency是数组,另一个用户的currency是字符串

> db.accounts.find()
{ "_id" : ObjectId("5d80fd4471c6b2236fb80de8"), "name" : { "first_name" : "qingquan", "last_name" : "zeng" }, "balance" : 100, "currency" : [ "CNY", "USD" ] }
{ "_id" : ObjectId("5d80fd4471c6b2236fb80de9"), "name" : { "first_name" : "fengxia", "last_name" : "yu" }, "balance" : 200, "currency" : "GBP" }

使用unwind对数组元素进行平铺,可以将currency为数组的记录,从一条记录拆分为多条记录

db.accounts.aggregate([
    {
        $unwind: {
            path: "$currency"
        }
    }
])
{ "_id" : ObjectId("5d80fd4471c6b2236fb80de8"), "name" : { "first_name" : "qingquan", "last_name" : "zeng" }, "balance" : 100, "currency" : "CNY" }
{ "_id" : ObjectId("5d80fd4471c6b2236fb80de8"), "name" : { "first_name" : "qingquan", "last_name" : "zeng" }, "balance" : 100, "currency" : "USD" }
{ "_id" : ObjectId("5d80fd4471c6b2236fb80de9"), "name" : { "first_name" : "fengxia", "last_name" : "yu" }, "balance" : 200, "currency" : "GBP" }

为了方便排查,还可以在设定一个字段,用于数组展开后标记每个元素在原数组的位置

db.accounts.aggregate([
    {
        $unwind: {
            path: "$currency",
            includeArrayIndex:"origin_index"
        }
    }
])
{ "_id" : ObjectId("5d80c37349f3060f1212a055"), "name" : { "first_name" : "qingquan", "last_name" : "zeng" }, "balance" : 100, "currency" : "CNY", "origin_index" : NumberLong(0) }
{ "_id" : ObjectId("5d80c37349f3060f1212a055"), "name" : { "first_name" : "qingquan", "last_name" : "zeng" }, "balance" : 100, "currency" : "USD", "origin_index" : NumberLong(1) }
{ "_id" : ObjectId("5d80c37349f3060f1212a056"), "name" : { "first_name" : "fengxia", "last_name" : "yu" }, "balance" : 200, "currency" : "GBP", "origin_index" : null }

还有一点需要注意的是,$unwind 在产生结果前,默认会直接过滤掉如下记录:

  • currency字段为空数组
  • currency字段不存在
  • currency字段为null

如果不想过滤的话,可以设定 preserveNullAndEmptyArrays 为 true

db.accounts.aggregate([
    {
        $unwind: {
            path: "$currency",
            includeArrayIndex: "origin_index",
            preserveNullAndEmptyArrays: true
        }
    }
])

$sort

  • 1 从小到大
  • -1 从大到小
db.accounts.aggregate([
    {
        $sort: {
            balance: -1
        }
    }
])
{ "_id" : ObjectId("5d80c37349f3060f1212a056"), "name" : { "first_name" : "fengxia", "last_name" : "yu" }, "balance" : 200, "currency" : "GBP" }
{ "_id" : ObjectId("5d80c37349f3060f1212a055"), "name" : { "first_name" : "qingquan", "last_name" : "zeng" }, "balance" : 100, "currency" : [ "CNY", "USD" ] }

mongoDB 聚合操作重复问题https://jacoobwang.GitHub.io/2018/01/08/MonGoDb%E8%81%9A%E5%90%88%E6%93%8D%E4%BD%9C%E9%87%8D%E5%A4%8D%E9%97%AE%E9%A2%98/

您可能感兴趣的文档:

--结束END--

本文标题: MongoDB 聚合管道使用

本文链接: https://www.lsjlt.com/news/5385.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MongoDB 聚合管道使用
    db.accounts.insert([{"name": {"first_name": "qingquan","last_name": "zeng"},"balance": 100},{"name": {"first_name": "fen...
    99+
    2016-11-25
    MongoDB 聚合管道使用
  • MongoDB 聚合管道(Aggregation Pipeline)
    管道概念 POSIX多线程的使用方式中, 有一种很重要的方式-----流水线(亦称为“管道”)方式,“数据元素”流串行地被一组线程按顺序执行。它的使用架构可参考下图: 以面向对象的思想去理解,整...
    99+
    2022-10-18
  • MongoDB管道聚合各阶段
    管道聚合各阶段   名称描述$project改造流中的文档,像通过增加新的字段或移除存在的字段。对于每一个输入文档,输出一个文档。$match过滤文档流,只允许匹配的文档不经过修改进入到...
    99+
    2022-10-18
  • MongoDB 聚合管道&关联处理
    db.forex.insert([ { ccy: "USD", rate: 6.91, date: new Date("2018-12-21") }, { ...
    99+
    2021-07-17
    MongoDB 聚合管道&关联处理
  • MongoDB 聚合管道的优化与局限
    db.transactions.aggregate([ { $group: { _id: "$currency", symbols: { ...
    99+
    2014-06-02
    MongoDB 聚合管道的优化与局限
  • mongodb聚合管道求和的方法是什么
    在MongoDB中,可以使用聚合管道(aggregation pipeline)的$group操作符来对数据进行求和。 $group...
    99+
    2023-08-24
    mongodb
  • 使用管道组合操作
    在 DSS 工作流程中,SQL 管道是一个混合多个后续配方(每个配方都使用相同 SQL 引擎)的过程。然后,可以执行包含这些集成配方(可能是可视配方和“SQL 查询”配方)的单个作业活动。 通常,SQL 查询会转换为关系代数中的表达式,即一...
    99+
    2023-10-22
  • MongoDB中管道有什么用
    这篇文章将为大家详细讲解有关MongoDB中管道有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MongoDB 管道的介绍及操作符实例一 介绍管道在Unix和Lin...
    99+
    2022-10-18
  • 如何使用MongoDB实现数据的聚合查询功能
    如何使用MongoDB实现数据的聚合查询功能MongoDB是一种流行的NoSQL数据库,它以其灵活性和高性能而备受青睐。在应用程序中,数据聚合是一项常见的任务,这是将数据集合中的多个文档组合在一起,并根据特定条件进行计算的过程。在本文中,我...
    99+
    2023-10-22
    MongoDB聚合查询 数据聚合功能 使用MongoDB实现聚合查询
  • 如何在mongoDB中利用java处理聚合函数
    本篇文章给大家分享的是有关如何在mongoDB中利用java处理聚合函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。需要对document中...
    99+
    2022-10-18
  • php聚合索引怎么使用
    在PHP中,聚合索引是指通过将多个字段合并成一个索引,以提高查询性能。以下是使用聚合索引的步骤:1. 创建索引:使用CREATE I...
    99+
    2023-10-18
    php
  • MySQL如何使用聚合函数
    这篇文章主要为大家展示了“MySQL如何使用聚合函数”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL如何使用聚合函数”这篇文章吧。聚合函数命令: sum...
    99+
    2022-10-19
  • MybatisPlus怎么使用聚合函数
    这篇文章主要介绍了MybatisPlus怎么使用聚合函数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MybatisPlus怎么使用聚合函数文章都会有所收获,下面我们一起来看看吧。首先如果使用sql是这么写的:...
    99+
    2023-07-05
  • Mysql聚合函数的使用介绍
    目录前言什么是聚合函数SUM 函数countmax与minsumavg总结前言 聚合函数用来对表中的数据进行统计和计算。users表结构如下: 什么是聚合函数 聚合函数是用来做简单的数据统计的,比如说统计一下 &ldq...
    99+
    2022-10-14
  • Django 聚合函数的具体使用
    前言 orm模型中的聚合函数跟MySQL中的聚合函数作用是一致的,也有像Sum、Avg、Count、Max、Min,接下来我们逐个介绍 聚合函数 所有的聚合函数都是放在djan...
    99+
    2022-11-12
  • Maven的使用之继承与聚合
    目录一、实验:继承1、概念2、作用3、举例4、操作4.1 创建父工程4.2 创建模块工程4.3 查看被添加新内容的父工程 pom.xml4.4 解读子工程的pom.xml4.5 在父...
    99+
    2023-05-17
    Maven的使用 Maven继承与聚合 Maven继承 Maven聚合
  • 如何在cmd中使用组合和管道命令
    这篇文章给大家介绍如何在cmd中使用组合和管道命令,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.&Usage:第一条命令 & 第二条命令 [& 第三条命令...]用这种方法可以同时执行多条命...
    99+
    2023-06-08
  • MySQL数据库:聚合函数的使用
    聚合函数 max() 最大值 min() 最小值 avg() 平均值 sum() 求和 count() 符合条件数据的数目 聚合函数不能嵌套使用 # 在统计时字段内没有满足条件的数值只有count返回数值0或者其他,而其余四个聚合函数返回n...
    99+
    2021-09-13
    MySQL数据库:聚合函数的使用
  • postgresql使用filter进行多维度聚合
    postgresql使用filter进行多维度聚合 你有没有碰到过有这样一种场景,就是我们需要看一下某个时间段内各种维度的汇总,比如这样:最近三年我们卖了多少货?有多少订单?平均交易价格多少?每个店铺卖了多少?交易成功的订单有多少?交易失...
    99+
    2015-05-04
    postgresql使用filter进行多维度聚合
  • Mysql 聚合函数嵌套使用操作
    目的:Mysql 聚合函数嵌套使用 聚合函数不可以直接嵌套使用,比如: max(count(*)) 但是可以嵌套子查询使用 eg: 注:后面那个 as 必须要写 select max(total) fro...
    99+
    2022-05-31
    Mysql 聚合函数嵌套
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作