Loading [MathJax]/jax/output/CommonHTML/jax.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mongo 实践之分组去重 aggregate group

Mongo 实践之分组去重 aggregate group

作者头像
用户4945346
发布于 2024-04-30 11:43:39
发布于 2024-04-30 11:43:39
46000
代码可运行
举报
文章被收录于专栏:pythonista的日常pythonista的日常
运行总次数:0
代码可运行
现在工作中的数据库存储都由 MySQL 切换到了MongoDB ,我计划写一个合集来记录用到的一些 Mongo 语句,有些是Mongo sql 语法,有些是 pymongo 的写法。

前段时间是需要查询一张表并对里面的数据去重。collection 表名叫 datatagging,它主要包含 3 个字段 "_id"、"unique_path"、"modified" ,我希望对 unique_path 这个字段去重,并根据 modified 这个日期字段保留最新的一条,返回的结果里必须包含 id。

实现的思路和希望的诉求是一样的,对 unique_path 进行分组,并且按照modified 倒序排列取每组第一条记录,然后把分组结果再输出

Mongo sql 是这样写的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pymongo import MongoClient

# 连接到 MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client.your_database_name  # 更改为你的数据库名称
collection = db.datatagging

# 构建聚合管道
pipeline = [
    {
        "$sort": {"unique_path": 1, "modified": -1}  # 按照 unique_path 升序,modified 降序排序
    },
    {
        "$group": {
            "_id": "$unique_path",
            "latestModified": {"$first": "$modified"},  # 获取每个 unique_path 分组中 modified 最新的值
            "document": {"$first": "$$ROOT"}  # 获取整个文档对象
        }
    },
    {
        "$replaceRoot": {"newRoot": "$document"}  # 将保存的整个文档对象作为输出文档
    },
    {
        "$sort": {"modified": -1}  # 按照 modified 字段倒序排列
    }
]

# 执行聚合查询
result = list(collection.aggregate(pipeline))

# 输出结果
ids = []
for doc in result:
    print(doc["_id"])

aggregate 接收一个数组参数,里面包含多个对象,可以把这些对象看作一个管道,从第一个对象串行执行到最后一个对象。group 阶段的 _id 字段指定了用于分组的键,因为对 unique_path 分组,所以我 _id 设置了unique_path

通过上面查询出来的结果得到了去重后的文档ids,后面再对整张表查询将不在 ids 中的记录删除掉

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
delete_result = collection.delete_many({"_id": {"$nin": ids}})

# 输出删除的记录数
print("Deleted", delete_result.deleted_count, "documents.")

可以通过 delete_result.deleted_count 获取删除的条数

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 pythonista的日常 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MongoDB教程(十):Python集成mongoDB
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
用户11147438
2024/07/20
3360
【详解】MongoDB基本用法
MongoDB 是一个基于分布式文件存储的开源数据库系统。它是一个NoSQL数据库,支持文档存储模式,非常适合处理大量数据的高性能应用。本文将介绍MongoDB的基本安装、启动、连接以及一些常用操作命令。
大盘鸡拌面
2025/07/19
1550
Python 基于pymongo操作Mongodb学习总结
如果连接用户名和密码包含诸如':', '/', '+' 及'@'保留字符,则使用前应该先进行编码,如下:
授客
2024/01/29
6730
Python基础教程(二十六):对接MongoDB
MongoDB是一种流行的NoSQL数据库,以其高性能、高可用性和灵活的数据模型著称。Python作为一种强大的编程语言,提供了与MongoDB无缝集成的能力,使得数据的读写、查询和管理变得更加便捷。本文将深入探讨如何使用Python与MongoDB进行交互,包括安装配置、基本操作、高级查询和实战案例。
用户11147438
2024/06/22
1K0
阶段性总结-python 中的 mongoDB
最近一直在忙着开发一套知识图谱的接口,主要用到的是mongoDB和neo4j,今天先来总结一部分:mongoDB的使用。
从不摸鱼的van
2023/11/20
6431
Python 系列文章 —— Python 操作 mongodb 详解
mongodb #导入 MongoClient 模块 from pymongo import MongoClient, ASCENDING, DESCENDING # 两种方式 #1. 传入数据库IP和端口号 mc = MongoClient('127.0.0.1', 27017) #2. 直接传入连接字串 mc = MongoClient('mongodb://127.0.0.1:27017') # 有密码的连接 # 首先指定连接testdb数据库 # db = mc.testdb # 通过aut
玩转编程
2022/01/15
3330
MongoDB教程(九):java集成mongoDB
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
用户11147438
2024/07/20
3050
[译] MongoDB Java异步驱动快速指南
导读 mongodb-java-driver是mongodb的Java驱动项目。 本文是对MongoDB-java-driver官方文档 MongoDB Async Driver Quick Tou
静默虚空
2018/01/05
3K0
硬货来了!轻松掌握 MongDB 流式聚合操作
信息科学中的聚合是指对相关数据进行内容筛选、处理和归类并输出结果的过程。MongoDB 中的聚合是指同时对多个文档中的数据进行处理、筛选和归类并输出结果的过程。数据在聚合操作的过程中,就像是水流过一节一节的管道一样,所以 MongoDB 中的聚合又被人称为流式聚合。
崔庆才
2019/10/08
5.2K0
硬货来了!轻松掌握 MongDB 流式聚合操作
NoSql数据库及使用Python连接MongoDB
NoSQL 数据库是非关系数据库,不使用结构化查询语言 (SQL) 进行数据操作。相反,他们使用其他数据模型进行访问和数据存储。SQL 数据库通常用于处理结构化数据,但它们可能不是处理非结构化或半结构化数据的最佳选择。
用户4235284
2023/10/14
6450
NoSql数据库及使用Python连接MongoDB
Mongo聚合分析命令浅析
在很多时候,我们需要临时统计下数据库中的数据,一般的做法是写一个脚本,通过代码来统计分析。 在mongo中,其实可以直接使用命令就可以实现,主要得益于其非常强大的统计命令支撑。
tunsuy
2023/09/24
4640
Mongo聚合分析命令浅析
pymongo:Python下 MongoDB 的存储操作
pymongo 3.x版本中,insert()方法官方已不推荐使用,推荐使用insert_one()和insert_many()将插入单条和多条记录分开。
luckpunk
2023/09/29
5220
Python操作Mongodb
连接MongoDB 连接MongoDB我们需要使用PyMongo库里面的MongoClient,一般来说传入MongoDB的IP及端口即可,第一个参数为地址host,第二个参数为端口port,端口如果不传默认是27017。 conn = MongoClient("localhost") MongoClient(host='127.0.0.1',port=27017)
py3study
2020/01/13
7120
Python 数据库骚操作 -- MongoDB
最近这几天准备介绍一下 Python 与三大数据库的使用,这是第一篇,首先来介绍 MongoDB 吧,这里介绍 MongoDB 的两款操作库,走起!!
1480
2019/08/05
1.1K0
Python 数据库骚操作 -- MongoDB
使用Python操作MongoDB
使用Python操作MongoDB需要使用一个第三方库——PyMongo。安装这个库与安装Python其他的第三方库一样,使用pip安装即可:
没有故事的陈师傅
2020/04/10
2.6K0
使用Python操作MongoDB
MongoDB的聚合操作以及与Python的交互
上一篇主要介绍了MongoDB的基本操作,包括创建、插入、保存、更新和查询等,链接为MongoDB基本操作。 在本文中主要介绍MongoDB的聚合以及与Python的交互。
星哥玩云
2022/08/17
5.6K0
MongoDB的聚合操作以及与Python的交互
菜鸟用Python操作MongoDB,看这一篇就够了
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看Python 3下MongoDB的存储操作。
IT派
2018/07/30
1.9K0
菜鸟用Python操作MongoDB,看这一篇就够了
Python 3 中 PyMongo 的用法
MongoDB存储 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库。 连接M
崔庆才
2017/07/26
6.5K0
最佳实践丨云数据库实现联表+聚合查询
聚合是云开发 CloudBase 数据库中非常重要的一种数据批处理操作方式。聚合操作可以将数据分组(或者不分组,即只有一组/每个记录都是一组),然后对每组数据执行多种批处理操作,最后返回结果。
腾讯云开发TCB
2021/04/08
1.3K0
最佳实践丨云数据库实现联表+聚合查询
python必掌握库:pymongo库的心你懂吗?
工欲善其事必先利其器,用pymongo库之前,大家需首先对MongoDB数据库的增删改查操作有一些基础方法的了解。
用户1564362
2019/10/15
1.7K0
python必掌握库:pymongo库的心你懂吗?
相关推荐
MongoDB教程(十):Python集成mongoDB
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验