【Python快速上手(三十一)】- Python MongoDB 详解

目录

  • Python快速上手(三十一)
    • Python MongoDB 详解
      • 1. 安装 pymongo
      • 2. 连接 MongoDB
      • 3. 创建和删除集合
      • 4. CRUD 操作
      • 5. 查询操作
      • 6. 索引
      • 7. 聚合
      • 8. 其他操作
      • 9. 连接池和超时
      • 10. 实际应用案例

Python快速上手(三十一)

Python MongoDB 详解

MongoDB 是一种 NoSQL 数据库,它使用文档存储数据,提供高性能、高可用性和易扩展性。Python 提供了 pymongo 库来与 MongoDB 进行交互。本文将详细讲解如何使用 Python 与 MongoDB 进行各种操作,包括连接数据库、CRUD 操作、查询、索引和聚合。

1. 安装 pymongo

在使用 MongoDB 前,需要安装 pymongo 库。可以使用以下命令安装:

pip install pymongo

2. 连接 MongoDB

2.1 基本连接
使用 MongoClient 类连接到 MongoDB 服务器:

from pymongo import MongoClientclient = MongoClient('localhost', 27017)

2.2 使用 URI 连接
可以使用 MongoDB URI 连接字符串:

client = MongoClient('mongodb://localhost:27017/')

2.3 访问数据库
连接到特定的数据库:

db = client['mydatabase']

或者:

db = client.mydatabase

2.4 认证
如果 MongoDB 需要认证,使用以下方式连接:

client = MongoClient('mongodb://username:password@localhost:27017/mydatabase')
db = client['mydatabase']

3. 创建和删除集合

3.1 创建集合
MongoDB 会在第一次插入文档时自动创建集合:

collection = db['mycollection']

3.2 删除集合
使用 drop 方法删除集合:

collection.drop()

4. CRUD 操作

4.1 插入文档
4.1.1 插入单个文档
使用 insert_one 方法插入一个文档:

document = {"name": "John", "age": 25, "city": "New York"}
collection.insert_one(document)

4.1.2 插入多个文档
使用 insert_many 方法插入多个文档:

documents = [{"name": "Anna", "age": 28, "city": "London"},{"name": "Mike", "age": 32, "city": "Chicago"}
]
collection.insert_many(documents)

4.2 查询文档
4.2.1 查询单个文档
使用 find_one 方法查询单个文档:

result = collection.find_one({"name": "John"})
print(result)

4.2.2 查询多个文档
使用 find 方法查询多个文档:

results = collection.find({"age": {"$gt": 20}})
for result in results:print(result)

4.3 更新文档
4.3.1 更新单个文档
使用 update_one 方法更新单个文档:

collection.update_one({"name": "John"}, {"$set": {"age": 26}})

4.3.2 更新多个文档
使用 update_many 方法更新多个文档:

collection.update_many({"age": {"$gt": 20}}, {"$set": {"city": "San Francisco"}})

4.4 删除文档
4.4.1 删除单个文档
使用 delete_one 方法删除单个文档:

collection.delete_one({"name": "John"})

4.4.2 删除多个文档
使用 delete_many 方法删除多个文档:

collection.delete_many({"age": {"$gt": 20}})

5. 查询操作

5.1 条件查询
使用查询操作符进行条件查询:

results = collection.find({"age": {"$gte": 25}})

常用查询操作符:

  • $eq:等于
  • $ne:不等于
  • $gt:大于
  • $gte:大于等于
  • $lt:小于
  • $lte:小于等于
  • $in:在指定数组内
  • $nin:不在指定数组内

5.2 逻辑操作符
使用逻辑操作符进行查询:

results = collection.find({"$or": [{"age": {"$lt": 25}}, {"city": "London"}]})

常用逻辑操作符:

  • $and:与
  • $or:或
  • $not:非
  • $nor:非或

5.3 正则表达式
使用正则表达式进行查询:

results = collection.find({"name": {"$regex": "^J"}})

5.4 字段选择
指定返回的字段:

results = collection.find({}, {"_id": 0, "name": 1, "age": 1})

5.5 排序
使用 sort 方法进行排序:

results = collection.find().sort("age", -1)

5.6 限制和跳过
使用 limit 和 skip 方法进行分页:

results = collection.find().skip(5).limit(10)

6. 索引

6.1 创建索引
使用 create_index 方法创建索引:

collection.create_index([("name", 1)])

6.2 列出索引
使用 list_indexes 方法列出索引:

for index in collection.list_indexes():print(index)

6.3 删除索引
使用 drop_index 方法删除索引:

collection.drop_index("name_1")

6.4 删除所有索引
使用 drop_indexes 方法删除所有索引:

collection.drop_indexes()

7. 聚合

7.1 基本聚合
使用 aggregate 方法进行聚合:

pipeline = [{"$match": {"age": {"$gte": 25}}},{"$group": {"_id": "$city", "average_age": {"$avg": "$age"}}}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

7.2 聚合操作符
常用聚合操作符:

  • $match:过滤数据
  • $group:分组并进行计算
  • $sort:排序
  • $limit:限制结果数量
  • $skip:跳过指定数量的结果
  • $project:改变输出文档的结构
  • $unwind:拆分数组字段中的元素

7.3 聚合示例
计算每个城市的平均年龄:

pipeline = [{"$group": {"_id": "$city", "average_age": {"$avg": "$age"}}}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

8. 其他操作

8.1 统计集合文档数量
使用 count_documents 方法统计文档数量:

count = collection.count_documents({"age": {"$gte": 25}})
print(count)

8.2 执行命令
使用 command 方法执行数据库命令:

result = db.command("serverStatus")
print(result)

9. 连接池和超时

9.1 设置连接池
可以设置连接池参数,例如最大连接数:

client = MongoClient('mongodb://localhost:27017/', maxPoolSize=50)

9.2 设置超时
可以设置连接超时和操作超时:

client = MongoClient('mongodb://localhost:27017/', serverSelectionTimeoutMS=5000, socketTimeoutMS=2000)

10. 实际应用案例

10.1 用户注册系统
以下示例展示了如何使用 MongoDB 实现一个简单的用户注册系统:

from pymongo import MongoClient
import datetimeclient = MongoClient('mongodb://localhost:27017/')
db = client['user_database']
users = db['users']# 注册用户
def register_user(username, password, email):user = {"username": username,"password": password,"email": email,"created_at": datetime.datetime.now()}users.insert_one(user)print(f"User {username} registered successfully")# 查询用户
def find_user(username):user = users.find_one({"username": username})if user:print(f"User found: {user}")else:print("User not found")# 更新用户密码
def update_password(username, new_password):result = users.update_one({"username": username}, {"$set": {"password": new_password}})if result.matched_count:print(f"Password updated for user {username}")else:print("User not found")# 删除用户
def delete_user(username):result = users.delete_one({"username": username})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动硬盘容量消失无法读取的解决方案

在数字化时代,数据的存储和备份变得尤为重要。移动硬盘作为一种便捷、大容量的存储设备,受到许多人的青睐。然而,有时我们可能会遭遇这样的问题:移动硬盘不显示容量且无法访问。这种情况无疑给我们的数据存储和管理带来了巨大的困…

uniapp移动端骨架屏流程

1.使用微信开发者工具来生成骨架屏;在分窗模式下选择页面信息,下拉选择生成骨架屏;他会基于当前页面生成骨架屏的样式 点击确定; 会自动生成这两个文件;一个是html结构文件,一个是css样式文件。 然后把这两…

黄石首家Pearson VUE国际认证考试中心落户湖北理工学院

Pearson VUE 作为 Pearson 集团的专门从事计算机化考试服务的公司,到目前为止,已在全世界165 个国家授权了 4400 多个考试中心以及超过 230 家 PVUE 自有考试中心,其中在中国的有三百多个授权考点和 4 个自有考试中心。Pearson VUE 以其技术和…

LLaMa系列模型详解(原理介绍、代码解读):LLaMA 3

LLaMA 3 2024年4月18日,Meta 重磅推出了Meta Llama 3,Llama 3是Meta最先进开源大型语言模型的下一代,包括具有80亿和700亿参数的预训练和指令微调的语言模型,能够支持广泛的应用场景。这一代Llama在一系列行业标准基准测试中展示…

2021辽宁省大学生程序设计竞赛(正式赛)

比赛经过:写了七八题,有一个topsort写错地方了,本场题目都较为简单考的知识都比较明显 补题:有些题目还得多思考其实也不难 目录 B.阿强的路 C.传染病统计 D.阿强与网格 E.生活大爆炸 F.Capslock G.字节类型 H.制造游戏币…

AI模型:开源VS闭源,谁主沉浮?

简介:评价一个AI模型“好不好”“有没有发展”,首先就躲不掉“开源”和“闭源”两条发展路径。对于这两条路径,你更看好哪一种呢? 开源AI模型的优点。 开源AI模型的最大优势在于其开放性和可访问性。通过将AI模型的源代码公开&a…

java学习四

Random 随机数 数组 静态初始化数组 数组在计算机中的基本原理 数组的访问 什么是遍历 数组的动态初始化 动态初始化数组元素默认值规则 Java内存分配介绍 数组在计算机中的执行原理 使用数组时常见的一个问题 案例求数组元素最大值 public class Test1 {public static void ma…

<工控><PLC>汇川Easy521系列PLC与汇川SV630N伺服进行EtherCat通讯的相关配置及指令编写

前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,PLC相关元器件如触摸屏…

父子级分类统计分类下数量sql

1 SELECTA.* FROM(SELECTA.project_id,COALESCE ( A.category_id, 0 ) category_id,( -- 其它没有查询的分类, 就会是null, 所以会归为其它CASEWHEN COALESCE ( A.category_name, 其他分类 ) 其他分类 THEN 其他 WHEN COALESCE ( A.category_name, 其他分类 ) 强电系统 THE…

【Unity3D美术】URP渲染管线学习01

扫盲简介 URP渲染管线是Unity3d提供的一种视觉效果更好的渲染模式,类似的还有Built RP(默认最普通的渲染模式)\ HDRP(超高清,对设备要求高),视觉效果好,而且占用资源少!成为主流渲染管线模式&a…

基于Docker部署GitLab环境搭建

文件在D:\E\学习文档子目录压缩\专项进阶,如ngnix,webservice,linux,redis等\docker 建议虚拟机内存2G以上 1.下载镜像文件 docker pull beginor/gitlab-ce:11.0.1-ce.0 注意:一定要配置阿里云的加速镜像 创建GitLab 的配置 (etc) 、 日志 (log) 、数…

成功案例(IF=7.4)| 代谢组+16s联合分析助力房颤代谢重构的潜在机制研究

研究背景 心房颤动(AF)是临床上最常见的持续性心律失常,具有显著的发病率和死亡率。高龄是房颤发病率、患病率和进展最显著的危险因素。与年龄在50-59岁之间的参与者相比,80-89岁之间的参与者患房颤的风险增加了9.33倍。目前尚不…

nss刷题(3)

1、[SWPUCTF 2021 新生赛]include 根据提示传入一个file后显示了关于flag的代码 这是一个文件包含,考虑php伪协议,构造payload: ?filephp://filter/readconvert.base64-encode/resourceflag.php 2、[SWPUCTF 2021 新生赛]Do_you_know_http …

Css 提高 - 获取DOM元素

目录 1、根据选择器来获取DOM元素 2.、根据选择器来获取DOM元素伪数组 3、根据id获取一个元素 4、通过标签类型名获取所有该标签的元素 5、通过类名获取元素 目标:能查找/获取DOM对象 1、根据选择器来获取DOM元素 语法: document.querySelector(css选择…

cmake uninstall like

如果有install_manifest.txt cat install_manifest.txt | sudo xargs rm #cat install_manifest.txt | xargs ls建议make install之前查看有没有make uninstall目标

cocos 写 连连看 小游戏主要逻辑(Ts编写)算法总结

cocos官方文档:节点系统事件 | Cocos Creator 游戏界面展示 一、在cocos编译器随便画个页面 展示页面 二、连连看元素生成 2.1、准备单个方块元素,我这里就是直接使用一张图片,图片大小为100x100,锚点为(0&#xff0…

ESP32基础应用之使用手机浏览器作为客户端与ESP32作为服务器进行通信

文章目录 1 准备2 移植2.1 softAP工程移植到simple工程中2.2 移植注意事项 3 验证4 添加HTML4.1 浏览器显示自己编译的html4.2 在使用html发数据给ESP324.3 HTML 内容4.4 更新 html_test.html 1 准备 参考工程 Espressif\frameworks\esp-idf-v5.2.1\examples\wifi\getting_sta…

PMapper:助你在AWS中实现IAM权限快速安全评估

关于PMapper PMapper是一款功能强大的脚本工具,该工具本质上是一个基于Python开发的脚本/代码库,可以帮助广大研究人员识别一个AWS账号或AWS组织中存在安全风险的IAM配置,并对IAM权限执行快速评估。 PMapper可以将目标AWS帐户中的不同IAM用户…

Hive环境搭建

1 安装Hive 下载文件 # wget -P /opt/ https://mirrors.huaweicloud.com/apache/hive/hive-2.3.8/apache-hive-2.3.8-bin.tar.gz 解压缩 # tar -zxvf /opt/apache-hive-2.3.8-bin.tar.gz -C /opt/ 修改hive文件夹名字 # mv /opt/apache-hive-2.3.8-bin /opt/hive 配置环境变量 …

torch Embedding 学习笔记

文本向量化(Text Embedding):将文本数据(词、句子、文档)表示成向量的方法。 词向量化将词转为二进制或高维实数向量,句子和文档向量化则将句子或文档转为数值向量,通过平均、神经网络或主题模…