惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
博客园_首页
GbyAI
GbyAI
罗磊的独立博客
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
U
Unit 42
V
Visual Studio Blog
F
Fortinet All Blogs
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LangChain Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Engineering at Meta
Engineering at Meta
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
T
Tor Project blog
Martin Fowler
Martin Fowler
K
Kaspersky official blog
Scott Helme
Scott Helme
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
D
DataBreaches.Net
博客园 - Franky
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
P
Proofpoint News Feed
N
Netflix TechBlog - Medium
美团技术团队
S
Secure Thoughts
C
Cisco Blogs
M
MIT News - Artificial intelligence
L
Lohrmann on Cybersecurity
T
Tenable Blog
N
News and Events Feed by Topic
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Check Point Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Spread Privacy
Spread Privacy
S
Security @ Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
A
Arctic Wolf
Hacker News - Newest:
Hacker News - Newest: "LLM"
H
Hacker News: Front Page
T
Threat Research - Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
O
OpenAI News
V
Vulnerabilities – Threatpost

博客园 - zakun

适配 WSL 的 proxy 完整脚本 Gitlab CI 本地开发部署 Golang grpc 实践 真・一键激活 JetBrains 全家桶! Kafka 分区细说 解决国内Homebrew安装 Homebrew How to Install PHP Install Elasticsearch with Docke wsl2 网络相关设置 php docker image nginx 反向代理常用设置说明 Golang常见的并发模式 Gin框架的几种热加载方法 协程 Mysql Full-Text Index 介绍 gitlab runner 使用摘要 Gitlab Docker 使用摘要 Docker 简介 linux-查看文件夹大小 Linux 如何删除乱码文件-inode删除 Nginx反爬虫: 禁止某些User Agent抓取网站 PHP添加$_SERVER服务器环境变量
Mongo 聚合演示
zakun · 2026-02-10 · via 博客园 - zakun

Mongo 聚合演示

你想要在 MongoDB 中统计指定时间范围 [t1, t2] 内,每辆车(按 sn 字段)的最新一条行程记录,我会为你提供精准的聚合查询语句。
参考链接:https://geek-docs.com/mongodb/mongodb-top-articles/1018100_mongodb_aggregation.html

实现思路

要实现这个需求,核心是通过 MongoDB 的聚合管道完成以下步骤:

  • 筛选出时间范围在 [t1, t2] 内的行程记录
  • 按车序列号 sn 分组
  • 在每个分组内按开始时间 start_time 降序排序,取第一条(最新)记录
  • 还原完整的行程记录字段

完整查询语句


// 定义时间范围(请替换为你实际的时间值)
const t1 = new Date("2026-01-01T00:00:00.000Z"); // 开始时间
const t2 = new Date("2026-01-31T23:59:59.999Z"); // 结束时间

// 聚合查询语句
db.riding_records.aggregate([
  // 第一步:筛选时间范围内的记录
  {
    $match: {
      start_time: {
        $gte: t1,    // 大于等于开始时间t1
        $lte: t2     // 小于等于结束时间t2
      }
    }
  },
  // 第二步:按车序列号分组,保留每组最新的记录
  {
    $group: {
      _id: "$sn",                // 按sn分组
      latestRecord: { $first: "$$ROOT" }  // 保留排序后的第一条(最新)记录
    }
  },
  // 第三步:按开始时间降序排序(确保每组第一条是最新的)
  {
    $sort: { "latestRecord.start_time": -1 }
  },
  // 第四步:还原记录结构(可选,让输出更整洁)
  {
    $replaceRoot: { newRoot: "$latestRecord" }
  }
]);

关键部分解释

  • $match 阶段:精准筛选出 start_time 在 [t1, t2] 范围内的行程记录,减少后续计算量。
  • $group 阶段:
    • _id: "$sn":按车序列号分组,确保每个 sn 只保留一条记录
    • $first: "$$ROOT":$$ROOT 代表整条文档,$first 取分组内排序后的第一条记录
  • sort 阶段
    • 按 start_time 降序排列,保证$first取到的是最新记录
  • $replaceRoot 阶段:将嵌套的 latestRecord 提升为根文档,输出结构和原文档一致