MongoDB小课堂: 聚合管道操作全面指南与实战解析

MongoDB系列--深入理解MongoDB聚合(Aggregation )   MongoDB中聚合(aggregate) 操作将来自多个document的value组合在一起,并通过对分组数据进行各种操作处理,并返回计算后的数据结果,主要用于处理数据(诸如统计平均值,求和等)。MongoDB提供三种方式去执行聚合操作:聚合管道(aggregation pipeline)、Map-Reduce函数以及单一的聚合命令(count、distinct、group)。 1. 聚合... 阅读详情

聚合操作基础

MongoDB聚合管道是数据分析的核心工具,通过多阶段处理实现复杂的数据转换和计算。其基础结构由以下要素构成:

1 ) aggregate()函数

  • pipeline(必选):定义有序处理阶段(如 $match, $project),每个阶段输出作为下一阶段输入
  • options(可选): 配置聚合操作的附加参数(如读写关注、游标批处理大小)
    db.collection.aggregate([...], {
      allowDiskUse: true,  // 允许大数据集使用磁盘缓存
      maxTimeMS: 30000     // 超时控制(毫秒)
    })
    

代码示例:函数基本结构

// MongoDB Shell  
db.collection.aggregate([  
  { $stage1: { ... } },  
  { $stage2: { ... } }  
], {  
  allowDiskUse: true,  // 允许使用磁盘缓存大数据集  
  maxTimeMS: 30000     // 设置超时时间  
})  

2 )执行特性

  • 游标机制:返回可迭代游标,Shell默认显示前20条结果。
  • 非破坏性操作:不影响原始集合数据。

表达式详解

表达式是聚合操作的"计算单元",分为三类:

类型语法作用示例
字段路径表达式$字段名定位文档字段$balance(顶级字段)
$内嵌文档.字段定位嵌套字段$name.first
系统变量表达式$$变量名引用系统变量$$CURRENT(当前文档,类似this)
常量表达式{ $literal: 值 }避免$开头的字符串被误解析为字段{ $literal: "$name" } → 输出字符串"$name"
  1. 字段路径表达式

    • 语法:$字段名 或 $内嵌文档.字段名
    • 作用:指向文档中的特定字段。
    • 语法:
      • $name → 顶级字段
      • $info.dateOpened → 内嵌文档字段
    • 示例:
      • 顶级字段:$balance(指向余额字段)
      • 内嵌字段:$name.first(指向name文档中的first字段)
  2. 系统变量表达式

    • 语法:$$变量名
    • 核心变量:
      • $$CURRENT:指代管道中当前操作的文档(类似 OOP 中的 this)。
      • 等价关系:$balance ≡ $$CURRENT.balance
  3. 常量表达式

    • 语法:{ $literal: 值 }
    • 场景:避免以 $ 开头的字符串被误解析为字段路径。
    • 示例:
      { $project: {  
         rawString: { $literal: "$name" } // 输出字符串 "$name" 而非字段值  
      }}  
      

要点

  • 表达式优先级:$前缀 > 系统变量 > 常量(需显式声明)。
  • 缺失字段处理:自动填充null值(如 $name.middle → null)。

核心聚合阶段


以下操作基于银行账户集合 accounts,文档结构示例:

{
  _id: ObjectId("..."),
  name: { first: "Alice", last: "Smith" },
  balance: 50,
  currency: ["CNY", "USD"]  // 部分文档为字符串(如"GBP")
}

按执行优先级排序,需组合使用以优化性能:

1 ) $match:文档筛选

  • 功能:过滤文档,语法与查询操作符完全一致。

  • 优化原则:尽可能在管道前端使用,减少后续处理的数据量。

  • 示例1:精确匹配名字

    db.accounts.aggregate([
      { $match: { "name.first": "Alice" } }  // 仅保留Alice的文档 
    ]);
    
  • 示例2:复合条件($or与范围查询)

    db.accounts.aggregate([
      {
        $match: {
          $or: [
            { balance: { $gt: 40, $lt: 80 } },  // 余额40~80
            { "name.last": "Yang" }              // 姓氏为Yang
          ]
        }
      }
    ]);
    

综合示例(结合 $project):

db.accounts.aggregate([  
  {  
    $match: {  
      $or: [  
        { balance: { $gt: 40, $lt: 80 } },   // // 余额40~80
        { "name.last": "杨" }    // 姓氏为 杨
      ]  
    }  
  },  
  {  
    $project: { _id: 0, balance: 1, lastName: "$name.last" }  
  }  
])  

优化建议:在管道起始阶段使用$match减少后续处理量

2 ) $project:字段重塑

  • 功能:控制输出字段、添加计算字段或剔除字段
  • 语法规则:
    • 字段: 1 → 保留字段
    • 字段: 0 → 排除字段
    • 新字段: 表达式 → 动态生成字段
  • 实战演示:
    db.accounts.aggregate([  
      {  
        $project: {  
          _id: 0,                   // 排除文档ID  
          balance: 1,               // 保留余额  
          clientName: "$name.first", // 从内嵌文档提取值  
          nameArray: [              // 构建数组字段  
            "$name.first",  
            "$name.middle",         // 指向不存在的字段 → 返回 null  
            "$name.last"  
          ]  
        }  
      }  
    ])  
    

输出效果:

  • 原字段 name 被替换为 clientName 和 nameArray

  • 缺失字段(如 middle)自动填充 null

  • 示例2:隐藏_id、保留balance、新增client_name

    db.accounts.aggregate([
      {
        $project: {
          _id: 0,               // 隐藏_id 
          balance: 1,           // 保留balance
          client_name: "$name.first"  // 新增字段(从name.first提取)
        }
      }
    ]);
    

    输出:

    { "balance": 50, "client_name": "Alice" }
    
  • 示例3:处理缺失字段

    db.accounts.aggregate([
      {
        $project: {
          name_array: [
            "$name.first", 
            "$name.middle",      // 原文档无此字段 → 返回null
            "$name.last"
          ]
        }
      }
    ]);
    

    输出:

    { "name_array": ["Alice", null, "Smith"] }
    

注意:

  • aggregate() 返回文档游标,不影响原集合数据
  • $project 不修改原集合,仅影响管道中的文档形态

3 ) $unwind:数组展开

  • 功能:将数组拆分为多篇独立文档(每元素一篇)

  • 参数逻辑对照表:

    参数作用输出影响(空数组场景)
    path: "$数组字段"指定目标字段默认丢弃
    includeArrayIndex: "下标名"记录元素原索引位置非数组字段→下标名: null
    preserveNullAndEmptyArrays: true保留空数组/null文档保留原文档
  • 特殊处理逻辑:

    • 非数组字段 → 视为单元素数组处理
    • 空数组/null字段 → 默认丢弃(需开启 preserveNullAndEmptyArrays 保留)
  • 基础语法:

    { $unwind: { path: "$数组字段" } }
    
  • 示例1:展开数组字段

    db.accounts.aggregate([{ $unwind: "$currency" }]);
    

    输入文档:

    { _id: 1, currency: ["CNY", "USD"] }  // Alice
    { _id: 2, currency: "GBP" }           // Bob 
    

    输出:

    { _id: 1, currency: "CNY" },  // 原数组拆为两篇 
    { _id: 1, currency: "USD" },
    { _id: 2, currency: "GBP" }   // 非数组字段原样保留 
    
  • 进阶参数:

    {
      $unwind: {
        path: "$currency",
        includeArrayIndex: "currIndex",  // 添加元素原下标
        preserveNullAndEmptyArrays: true // 保留空数组/null值文档
      }
    }
    

    输出效果:

    • 数组元素:currIndex 记录下标(从0开始)
    • 非数组字段:currIndex: null
    • 空数组/字段缺失:保留文档(需开启preserveNullAndEmptyArrays)

综合示例:

// 展开 currency 数组并保留索引  
db.accounts.aggregate([  
 {  
   $unwind: {  
     path: "$currency",  
     includeArrayIndex: "currIndex",
     preserveNullAndEmptyArrays: true
   }  
 }  
])  

4 )$limit 与 $skip :结果集分页

  • $limit:保留前 N 篇文档({ $limit: N })
  • $skip:跳过前 M 篇文档({ $skip: M })
  • 典型场景:分页查询(需配合 $sort 确保顺序一致)
  • 分页组合:
    [{ $skip: 10 }, { $limit: 5 }]  // 跳过前10条,取5条(需配合$sort保证顺序)
    

5 ) $sort :排序

  • 语法:{ $sort: { 字段1: 排序方向, 字段2: 排序方向 } }
    • 1 → 升序
    • -1 → 降序
  • 用例:
    db.accounts.aggregate([
      { 
        $sort: { 
          balance: 1,          // 余额升序
          "name.last": -1       // 姓氏降序
        } 
      }
    ]);
    

要点

  • 阶段顺序黄金法则:$match → $project → $unwind → $sort → $limit/$skip
  • 内存警告:$unwind可能大幅增加文档量,需搭配allowDiskUse: true

聚合管道设计原则与性能优化


1 ) 阶段顺序重要性:

  • 优先执行 $match 和 $project 减少数据处理量
  • $unwind 可能导致文档数量激增,需谨慎放置

2 ) 游标机制:

  • 聚合结果以游标形式返回,支持分批处理大数据集
  • Shell 中默认打印前 20 篇文档

3 ) 资源控制:

  • 通过 options 参数设置 allowDiskUse: true 避免内存溢出

组合管道实战


场景:银行账户数据分析(集合:accounts)

// 目标:筛选高价值客户,提取姓名+余额,按货币拆分后排序
db.accounts.aggregate([
  { $match: { balance: { $gt: 100 } }},       // 1. 过滤余额>100 
  { $project: {                               // 2. 重塑结构 
      _id: 0,
      fullName: { $concat: ["$name.first", " ", "$name.last"] },
      balance: 1,
      currency: 1 
  }},
  { $unwind: {                                // 3. 拆分货币数组 
      path: "$currency",
      preserveNullAndEmptyArrays: false
  }},
  { $sort: { currency: 1, balance: -1 } }     // 4. 按货币升序+余额降序
])

输入文档示例:

{
  _id: ObjectId("60a1b2c3d4e5f6a7b8c9d0e1"),
  name: { first: "张", last: "伟" },
  balance: 150,
  currency: ["CNY", "USD"]
}

输出结果:

{ "fullName": "张 伟", "balance": 150, "currency": "CNY" }
{ "fullName": "张 伟", "balance": 150, "currency": "USD" }

NestJS集成示例


1 ) 示例1:

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { AccountDocument } from './account.schema';
 
@Injectable()
export class AccountService {
  constructor(
    @InjectModel('Account') private accountModel: Model<AccountDocument>,
  ) {}
 
  // 聚合查询:获取姓氏为"Yang"的客户全名与余额(降序)
  async getHighValueClients(): Promise<any[]> {
    const pipeline = [
      { $match: { "name.last": "Yang" } }, 
      { $project: { 
          _id: 0, 
          fullName: { $concat: ["$name.first", " ", "$name.last"] },
          balance: 1 
      }},
      { $sort: { balance: -1 } }  // 余额倒序排列 
    ];
    return this.accountModel.aggregate(pipeline).exec();
  }
}

2 ) 示例2:

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { AccountDocument } from './account.schema';

@Injectable()
export class AccountService {
  constructor(
    @InjectModel('Account') private accountModel: Model<AccountDocument>,
  ) {}

  async aggregateAccounts() {
    return this.accountModel.aggregate([
      { $match: { 'name.first': 'Alice' } },
      { $project: { _id: 0, balance: 1, clientName: '$name.first' } }
    ]).exec();
  }
}

3 ) 示例3:

// NestJS 中使用聚合管道
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { AccountDocument } from './account.schema';
 
@Injectable()
export class AccountService {
  constructor(
    @InjectModel('Account') private accountModel: Model<AccountDocument>,
  ) {}
 
  async runAggregationPipeline() {
    return this.accountModel.aggregate([
      { $match: { 'name.lastName': 'Yang' } },
      { 
        $project: { 
          _id: 0, 
          fullName: { $concat: ["$name.firstName", " ", "$name.lastName"] },
          balance: 1 
        } 
      },
      { $sort: { balance: -1 } }
    ]).exec();
  }
}

关键点总结:

  • 字段路径表达式($field)是聚合操作的基础定位工具
  • $project重塑文档时支持动态字段生成与复杂嵌套提取
  • $unwind数组展开需警惕空值处理逻辑,通过preserveNullAndEmptyArrays保留异常文档
  • 管道阶段顺序直接影响性能,优先过滤($match)和精简字段($project)

原生 SQL 对比参考(非 MongoDB 语法):

/* 类似 $project + $match 效果的 SQL */  
SELECT first_name AS clientName, balance  
FROM accounts  
WHERE balance > 40  
ORDER BY clientName ASC;  

最佳实践与注意事项


1 ) 性能优化关键:

  • 前置过滤:尽早使用$match减少文档量。
  • 字段精简:$project剔除无用字段,降低内存占用。
  • 警惕$unwind + $group组合:大数据集可能触发内存溢出。

2 ) 特殊场景处理:

  • 空数组/缺失字段:$unwind默认丢弃,需显式启用preserveNullAndEmptyArrays: true保留。
  • 非常量字符串:以$开头的文本必须用$literal包裹(如 { $literal: "$test" })。

3 ) 错误规避策略:

// 错误示例:未包裹的$开头的字符串 
{ $project: { raw: "$name" } }  // 解析为字段 → 输出"Zhang"

// 正确修复:使用$literal
{ $project: { raw: { $literal: "$name" } } }  // 输出字符串"$name"

要点

  • 聚合管道 = 数据工厂流水线:阶段顺序决定逻辑正确性与性能。
  • 表达式是基石:精准区分字段路径($field)、系统变量($$CURRENT)、常量($literal)。
  • 终极口诀:先过滤、再精简、慎拆数组、排序分页收尾。

核心价值总结

  • 聚合表达式是指定字段操作的基础,区分 $字段(路径)、$$变量(系统)、$literal(常量)
  • 管道阶段需有序组合:$match → $project → $unwind → $sort → $limit/$skip 是高效执行的关键路径
  • $unwind 的特殊性:默认丢弃空数组/null文档,需显式启用 preserveNullAndEmptyArrays 保留
  • 性能要点:尽早过滤数据、避免中间阶段产生过大临时结果集
  • 游标特性:
    • aggregate() 返回游标,不修改原集合数据。
    • 未赋值的游标在Mongo Shell中自动打印前20条结果。
  • 性能优化:
    • 尽早使用 $match、$project 减少处理量
    • 避免在 $unwind 后接 $group 导致内存溢出(大数据集)
  • 特殊处理:
    • $unwind 默认丢弃空数组/null字段文档,需显式开启 preserveNullAndEmptyArrays 保留。

MongoDB聚合管道将多步数据处理压缩为单次操作,适用于:

  • 实时分析:如金融账户风险评估
  • 数据清洗:转换嵌套结构或无效值
  • 报表生成:组合统计与排序输出
    通过本文的表达式解析、阶段优化法则及实战案例,可高效解决复杂业务场景的数据处理需求
Mongo --- Mongo Pipeline 在MongoDB中,聚合管道(aggregation pipeline)是一种用于处理和转换数据的机制。它允许您按顺序对集合中的文档执行一系列操作,并将结果从一个阶段传递到下一个阶段。聚合管道由多个阶段组成,每个阶段在输入文档上执行特定的操作,并生成转换后的输出,作为下一个阶段的输入。聚合管道中的每个阶段接收输入文档,并应用某种操作,例如过滤、分组、投影或排序,以生成一组修改后的文档。一个阶段的输出成为下一个阶段的输入,形成了一个数据处理的管道流程. 阅读详情

相关推荐

二十四、MongoDB 聚合运算( aggregate )

二十四、MongoDB 聚合运算( aggregate )

qq_25843323的博客 741

mongoDB中聚合(aggregate)的具体使用

mongoDB中聚合(aggregate)的具体使用 - 简书 最近在学习mongoDB的使用,本文来介绍一下其中aggregate的具体使用 先来看一个分组的例子,本例中$group是一个管道操作符,获得的结果可以接着输出到下一个管道,而内部的$sum是一个表达式操作符。 用$group 举个例子 将document分组,用作统计结果 ``` db.Ubisoft.aggregate([ // aggregate方法接收的是一个数组 { $gr

ycclydy的博客 2万+

2026年数据集成三大趋势:CDC、流处理与数据产品化

数据集成是构建现代数据架构的核心环节,其核心原理在于将分散在不同源头的数据进行高效、可靠的整合与流动。传统批处理模式因高延迟难以满足实时决策需求,而基于变更数据捕获(CDC)和流处理技术的实时事件驱动范式正成为主流。CDC通过监听数据库日志实现低侵入、高保真的数据捕获,从源头保障了数据的完整性和顺序性。流处理平台如Apache Kafka和Flink则扮演了数据高速公路与实时加工厂的角色,支持高吞吐、有状态的计算,是实现实时特征服务等场景的技术基石。这些技术的价值在于将数据从历史记录转变为驱动即时行动的燃料

weixin_33739627的博客 432

MongoDB 聚合

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

dongba8的博客 2358

核心面试聚焦:业务问题+系统问题+设计题---字节、阿里、美团等整理统计

业务系统及其他相关面试问题整理:线上相关问题排查+高并发系统的限流+高并发秒杀系统设计+负载均衡+一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出?

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 414

MongoDB小课堂: 聚合管道实战详解与性能优化策略

MongoDB聚合管道实战优化指南 摘要:本文详解MongoDB聚合管道的核心操作与性能优化策略。重点解析$lookup条件查询实现跨集合动态关联,$group阶段支持多维统计分析与衍生字段计算,以及$out阶段的结果持久化机制。通过股票交易数据分析案例,展示从分组统计到结果输出的全流程实现。优化策略包括阶段重排、索引利用和内存控制,特别指出$lookup关联操作应配合$match提前过滤数据,$group阶段避免过度使用$push导致内存溢出。实战表明,合理设计的聚合管道可显著提升金融数据分析、实时报表等

Wang的专栏 1862

微机原理--输入输出实验--emu8086

通过实验,验证了基本要求,实现了一位数加法运算的功能,同时实现了两位数加法运算的功能,还有一位数的除法。思考题(1)输入输出数据和计算用数据的区别:从键盘上输入以及输出的数据要在通过转化为计算机所识别的二进制的数字,和计算所用的数据之间相差30H。(2)单字符输入输出和串输入输出的不同之处:单字符的输入使用1号功能键,输出通过2号功能调用,且待显示字符送给DL寄存器;串输入使用0A功能,输出通过9号功能调用,DS:DX指向待显示字符串,且字符串必须以“$”结束。

m0_58837398的博客 2419

MongoDB小课堂: 深度掌握$lookup聚合——从基础语法到高级关联查询实战指南

MongoDB的$lookup聚合阶段实现跨集合关联查询,类似SQL的JOIN但以文档嵌套形式输出。其核心特性包括:支持数组字段自动展开多值匹配,非破坏性操作保留原文档结构,结果始终以数组形式返回。典型语法包含from、localField、foreignField和as四个参数,适用于银行账户关联汇率、电商订单关联商品等场景。当需要1:1匹配时,可配合$unwind展开数组字段。$lookup严格校验字段存在性,未匹配时返回空数组,是MongoDB实现复杂数据关联的关键功能。

Wang的专栏 1094

Unity六边形网格A*寻路实战:从坐标转换到算法优化

寻路算法是游戏开发与AI领域的核心技术,它决定了智能体在虚拟空间中的移动决策能力。A*算法作为启发式搜索的经典实现,通过结合实际代价与预估代价,能在复杂环境中高效找到最优路径。其技术价值在于平衡了搜索效率与结果最优性,广泛应用于策略游戏、机器人导航和自动化规划等场景。在游戏开发中,六边形网格因其移动自然、邻接均衡的特性,常被用于《文明》等经典策略游戏的地图设计。本文聚焦于Unity环境下,针对尖头朝上六边形网格的A*寻路实现,深入解析了轴向坐标系的选型、邻居计算的优化策略以及地形代价的融合方法,为战棋类或策

weixin_29017445的博客 293

Open3D——RANSAC拟合球面【2026最新版】

RANSAC三维点云球面拟合,博客长期更新,本文最新更新时间为:2026年3月5日。

点云侠的博客 4086

MongoDB小课堂: 游标操作与文档投影技术深度解析

本文总结了MongoDB游标操作的核心技术与实践要点。主要内容包括:1)游标的价值在于延迟执行、内存控制和分布式适配;2)游标控制的四维技术体系,包括计数函数、执行顺序、文档投影和数组操作;3)典型应用场景与优化方案,如分页查询和大数据处理;4)四大核心实践原则,强调执行顺序、投影规范、数组处理选型和性能优化。重点指出游标函数执行顺序不可变、投影操作禁止混用包含/排除语法等关键注意事项,为开发者提供了安全模板代码和分布式环境优化建议。

Wang的专栏 1172

VSCode + QMT 量化交易完整解决方案!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1331

MongoDB 深度解析:从原理到实践的完整指南

本篇知识点与下列全部练习一一对应,学完应能独立复现每一类操作(本地需已安装 MongoDB 与 Node):mongod 服务数据库集合 collection文档 document BSONNode.jsMongoose ODMExpress 路由EJS 页面【代码注释】(知识脉络图)名词解析:Windows / macOS 安装要点:启动服务: 【代码注释】连接: 【代码注释】 【代码注释】(退出命令)【代码注释】GUI 工具(市面常用):行业落点: 开发用 Compass 看文档结构;运维用 / 做

黄裳博客 313

手把手带你死磕ORBSLAM3源代码(一)目录详解

ORB-SLAM3是一种基于特征点的稀疏实时单目SLAM(Simultaneous Localization and Mapping)系统。它是ORB-SLAM系列模型的第三代版本,用于在无人机、机器人和增强现实等领域中进行实时定位和建图。ORB-SLAM3使用了一种特征点提取和描述算法,称为ORB(Oriented FAST and Rotated BRIEF)。该算法能够提取图像中的稳定特征,并将其用于地图建立和相机定位。

anananajiushiwo的博客 2304

Cadence PCB仿真使用Allegro PCB SI S参数配置方法图文教程

S参数即S-Parameter是指散射参数,描述信号在传输线中的正反向传输和正反向反射的情况。本文讲述在使用Allegro PCB SI进行信号完整性仿真前,S参数的配置方法。

fydar的博客 2178

【爬虫开发】爬虫开发从0到1全知识教程第10篇:Mongodb数据库【附代码文档】

1.Mongodb数据库包括介绍、mongodb简单使用(mongodb服务端启动、启动mongodb客户端进入mongo shell)。2. scrapy爬虫框架涵盖 ip使用、启动爬虫、停止爬虫、scrapyd webapi。3. Gerapy包含通过Gerapy配置管理scrapy项目。4. appium移动端抓取涉及appium自动控制移动设备、appium-python-client模块安装、初始化获取移动设备分辨率、定位元素提取文本方法、控制抖某音app滑动、自动滑动代码整理。5. 爬虫概述包括

yinuo_432的博客 1199

【StarRocks】-- DATETIME 与 TIMESTAMP 区别详解

本文详细解析了StarRocks中DATETIME/DATETIMEV2与TIMESTAMP的区别及使用场景。DATETIME系列存储人类可读时间,不携带时区;TIMESTAMP实际指Unix时间戳,建议用BIGINT存储。关键差异包括:精度选择(DATETIMEV2支持微秒级)、时区处理(仅函数计算时影响)、存储方式等。针对不同场景提供选型建议:单时区展示用DATETIMEV2,跨时区计算用BIGINT存储Epoch。特别强调与MySQL迁移时的注意事项,并给出常见问题解决方案和最佳实践清单,包括统一入口

欢迎来到我的博客,一起探索代码里的世界! 501

六音音源导入在音乐教学平台的应用案例

采用Vue.js构建教师端管理界面和学生端播放器,Node.js处理音源上传与元数据管理,MongoDB存储音源标签、使用记录等非结构化数据。最近参与了某在线音乐教育平台的音源管理模块开发,核心目标是让教师能灵活导入六音音源并生成教学素材库,同时为学生提供便捷的练习环境。我们为教师端设计了拖拽上传区域,上传后自动触发音质检测,过滤低采样率文件。建议有类似需求的开发者重点关注音源元数据的结构化设计,这是后续扩展智能推荐功能的基础。我们正在尝试用机器学习分析学生练习数据,自动匹配难度适宜的音源组合。

GreyWolf12的博客 468

ransac拟合2D圆(三点定圆 c++详细版)

RANSAC(Random Sample Consensus,随机采样一致性)算法是一种基于随机采样的迭代算法,主要用于从一组包含大量噪声和异常值(外点)的数据中估计数学模型的参数。

twnkie的博客 1048

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Mongodb笔记八:聚合函数_mongo聚合函数

管道:管道一般用于将当前命令的输出结果作为下一个命令的输入,在mongodb中,管道具有同样的作用,文档处理完毕 后,通过管道进行下一次处理。_id : null, // ---->分组依据为不分组,聚合函数必须分组,如不需分组写null。$sort:{ “keyname”:1 | -1 } // 1表示升序, 0表示降序。$project:{ name:1 | 0 } // 1表示显示, 0表示不显示。

2401_89872732的博客 1323

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MongoDB Aggregation(聚合)

聚合操作处理数据记录并返回计算结果。将来自多个文档的操作组值聚合在一起,并可以对分组的数据执行各种操作以返回单个结果。MongoDB提供了三种执行聚合的方法:聚合管道、map-reduce函数和单一用途的聚合方法。 一、聚合管道 聚合管道是基于数据处理管道概念建模的数据聚合框架。文档进入一个多阶段的管道,该管道将文档转换为聚合的结果。例如: 例子: db.orders.aggregate...

qq_33642970的博客 6234

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

MongoDB 聚合运算( aggregate )

MongoDB 的聚合框架提供了一种强大的方式来处理数据并生成汇总报告。它允许你对文档执行复杂的分组操作,如计算平均值、总和、最大值、最小值等,并支持多阶段的数据处理。

qq_33240556的博客 1043

【MongoDB】聚合(aggregate)

MongoDB使用有一段时间了,前几天遇到一个统计需求,用到了聚合(aggregate)查询,要求在学员表中以班级分组,查询各个班级的学员数量。此篇文章借此应用场景重新梳理了下aggregate的使用方法。

a408492801的博客 873

mongodb的aggregate方法

mongo

weixin_50208491的博客 906

MongoDB之聚合aggregate操作

关于mongodb的高级操作,包括聚合、主从复制、分片、备份与恢复、MR。 一、聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum()、avg() 语法 db.集合名称.aggregate([{管道:{表达式}}]) 管道:管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的输入 ps ajx | grep mongo ...

lixinkuan的博客 2551
上一篇: MongoDB小课堂:全面解析数组操作与高效文档删除策略-——深度对比 `$pull`/`$pullAll` 行为差异、占位符应用与事务控制
下一篇: MongoDB小课堂: 索引核心机制深度剖析与高效应用实践指南
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值