10 Python进阶:MongoDB
MongoDb介绍

MongoDB是一个基于分布式架构的文档数据库,它使用JSON样式的数据存储,支持动态查询,完全索引。MongoDB是NoSQL数据库的一种,主要用于处理大型、半结构化或无结构化的数据。以下是MongoDB数据库的一些关键特点和优势:
-
分布式架构: MongoDB可以运行在多个服务器上,以实现高可用性和可伸缩性,允许数据存储在集群中的不同节点上。
-
文档数据库: MongoDB使用类似JSON格式的BSON(Binary JSON)来存储数据,每个文档都是一个数据记录,这些文档可以包含不同结构和类型的数据。
-
动态查询: MongoDB支持丰富的查询操作,它使用内置的聚合框架来实现复杂的数据分析和数据处理。
-
完全索引: MongoDB支持创建多种类型的索引,包括单字段、复合字段和地理空间索引,以提高查询性能和灵活性。
-
分片和复制: MongoDB可以通过分片将数据水平划分为多个部分,同时还支持数据复制来提供数据可靠性和可用性。
-
丰富的功能: MongoDB提供了丰富的功能,包括灵活的数据模型、强大的聚合框架、自动分片和负载均衡等。
MongoDB是一个灵活、高性能、可扩展的数据库系统,特别适合用于处理大规模、半结构化或无结构化的数据,例如Web应用程序、日志存储、内容管理,以及实时分析等场景。
PyMongo 安装和测试
PyMongo是Python与MongoDB数据库交互的官方驱动程序,可以让Python开发人员方便地与MongoDB数据库进行连接、查询和操作。下面是关于PyMongo的介绍以及如何安装和测试PyMongo的简单示例:

PyMongo介绍:
- PyMongo是MongoDB官方提供的Python驱动程序,提供了高效的API来与MongoDB进行交互。
- PyMongo支持对MongoDB数据库进行连接、插入数据、查询数据、更新数据、删除数据等操作。
- PyMongo贴合Python开发者的习惯和使用方式,使得在Python应用程序中操作MongoDB更加便捷。
安装PyMongo:
你可以使用pip命令来安装PyMongo,运行以下命令:
pip install pymongo
测试PyMongo:
以下是一个简单的PyMongo测试示例,实现连接到MongoDB数据库、插入数据、查询数据的功能:
import pymongo
运行上述代码,导入不报错即可。
创建数据库
在MongoDB中,可以通过连接到数据库并查询数据库的方式来判断数据库是否已存在,如果不存在则创建数据库。下面是一个使用PyMongo实现这一功能的示例代码:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")# 列出所有数据库
database_list = client.list_database_names()# 要创建的数据库名称
database_name = "mydatabase"# 判断数据库是否已存在
if database_name in database_list:print(f"数据库 {database_name} 已经存在。")
else:# 创建数据库db = client[database_name]print(f"数据库 {database_name} 创建成功。")# 重新列出所有数据库,检查是否成功创建
print(client.list_database_names())
运行以上代码后,它会连接到本地MongoDB数据库,列出所有数据库的名称,然后判断要创建的数据库是否已存在。如果数据库已存在,则输出提示信息;如果数据库不存在,则创建该数据库并输出成功创建的提示信息,并重新列出所有数据库,以确认新数据库是否已成功创建。
通过这种方式,你可以在PyMongo中判断数据库是否已存在,如果不存在则创建数据库。
创建集合
在MongoDB中,可以通过集合是否存在来判断数据库中的集合是否已存在,如果不存在则创建新集合。下面是一个使用PyMongo实现这一功能的示例代码:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")# 选择要操作的数据库
db = client["mydatabase"] # 要创建的集合名称
collection_name = "customers"# 列出所有集合
collection_list = db.list_collection_names()# 判断集合是否已存在
if collection_name in collection_list:print(f"集合 {collection_name} 已经存在。")
else:# 创建集合db.create_collection(collection_name)print(f"集合 {collection_name} 创建成功。")# 重新列出所有集合,检查是否成功创建
print(db.list_collection_names())
运行以上代码后,它会连接到本地MongoDB数据库,并选择操作名为"mydatabase"的数据库。然后,它会列出数据库中的所有集合名称,判断要创建的集合是否已存在。如果集合已存在,则输出提示信息;如果集合不存在,则创建该集合并输出成功创建的提示信息,并重新列出所有集合名称,以确认新集合是否已成功创建。
增
在MongoDB中使用PyMongo,可以通过不同的方式向集合中插入文档(数据)。以下是几种常见的插入文档的方式:
1. 插入单个文档:
你可以使用insert_one()方法向集合中插入单个文档。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]data = { "name": "Alice", "age": 30, "city": "Shanghai" }
insert_result = collection.insert_one(data)
print("Inserted data with ID:", insert_result.inserted_id)
2. 插入多个文档:
使用insert_many()方法可以向集合中插入多个文档。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]data_list = [{ "name": "Bob", "age": 25, "city": "Beijing" },{ "name": "Cathy", "age": 35, "city": "Guangzhou" }
]insert_result = collection.insert_many(data_list)
print("Inserted data with IDs:", insert_result.inserted_ids)
3. 使用save()方法插入文档:
你也可以使用save()方法向集合中插入文档,如果文档存在则更新,不存在则插入。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]data = { "name": "David", "age": 40, "city": "Chengdu" }
insert_result = collection.save(data)
print("Inserted or updated data with ID:", data["_id"])
这些是向MongoDB集合中插入文档的几种常见方法。根据具体需求不同,选择适合的方法来插入数据。
删
在MongoDB中使用PyMongo,你可以通过不同的方法删除集合中的文档。以下是几种常见的删除文档的方式:
1. 删除单个文档:
你可以使用delete_one()方法删除符合特定条件的单个文档。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]query = { "name": "Alice" }
delete_result = collection.delete_one(query)
print(delete_result.deleted_count, "document deleted.")
2. 删除多个文档:
使用delete_many()方法可以删除符合特定条件的多个文档。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]query = { "age": { "$lt": 30 } }
delete_result = collection.delete_many(query)
print(delete_result.deleted_count, "documents deleted.")
3. 删除集合中所有文档:
如果你想一次性清空整个集合,可以使用delete_many({})方法删除集合中的所有文档。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]delete_result = collection.delete_many({})
print(delete_result.deleted_count, "documents deleted.")
这是向MongoDB集合中删除文档的几种常见方法。
改
在MongoDB中使用PyMongo,你可以通过不同的方法修改集合中的文档。以下是几种常见的修改文档的方式:
1. 更新单个文档:
你可以使用update_one()方法来更新符合特定条件的单个文档。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]filter_query = { "name": "Alice" }
update_query = { "$set": { "age": 31 } }update_result = collection.update_one(filter_query, update_query)
print(update_result.modified_count, "document updated.")
2. 更新多个文档:
使用update_many()方法可以更新符合特定条件的多个文档。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]filter_query = { "city": "Shanghai" }
update_query = { "$set": { "city": "Beijing" } }update_result = collection.update_many(filter_query, update_query)
print(update_result.modified_count, "documents updated.")
3. 替换文档:
使用replace_one()方法可以替换符合特定条件的单个文档。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]filter_query = { "name": "Bob" }
replacement_doc = { "name": "Bobby", "age": 26, "city": "Hangzhou" }replace_result = collection.replace_one(filter_query, replacement_doc)
print(replace_result.modified_count, "document replaced.")
这些是在MongoDB中修改文档的几种常见方法。根据具体需求,选择适合的方法来修改数据。
查
在MongoDB中使用PyMongo,你可以通过不同的方法查询集合中的文档。以下是几种常见的查询文档的方式:
1. 查询单个文档:
使用find_one()方法可以查询符合特定条件的单个文档。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]query = { "name": "Alice" }result = collection.find_one(query)
print(result)
2. 查询多个文档:
使用find()方法可以查询符合特定条件的多个文档。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]query = { "age": { "$gt": 25 } }results = collection.find(query)
for result in results:print(result)
3. 简单查询:
你还可以进行更简单的查询,例如查询所有文档、对查询结果进行排序等操作。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]# 查询所有文档
results = collection.find()
for result in results:print(result)# 查询所有文档并按年龄降序排序
results = collection.find().sort("age", pymongo.DESCENDING)
for result in results:print(result)
这些是在MongoDB中查询文档的几种常见方法。根据具体需求,选择适合的方法来查询数据。
排序
在MongoDB中使用PyMongo,你可以使用sort()方法对查询结果进行排序。以下是一些常见的排序示例:
1. 升序排序:
要对特定字段进行升序排序,可以使用pymongo.ASCENDING或者1表示升序。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]# 对age字段进行升序排序
results = collection.find().sort("age", pymongo.ASCENDING)
for result in results:print(result)
2. 降序排序:
要对特定字段进行降序排序,可以使用pymongo.DESCENDING或者-1表示降序。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]# 对age字段进行降序排序
results = collection.find().sort("age", pymongo.DESCENDING)
for result in results:print(result)
3. 多重排序:
如果需要按照多个字段进行排序,可以在sort()方法中指定多个字段和对应的排序方式。示例代码如下:
import pymongo# 连接到本地MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]# 先按age字段降序排序,再按name字段升序排序
results = collection.find().sort([("age", pymongo.DESCENDING), ("name", pymongo.ASCENDING)])
for result in results:print(result)
以上是对MongoDB查询结果进行排序的示例代码。根据具体需求,在查询时添加适当的排序操作即可
关注我,不迷路,共学习,同进步
关注我,不迷路,共学习,同进步

相关文章:
10 Python进阶:MongoDB
MongoDb介绍 MongoDB是一个基于分布式架构的文档数据库,它使用JSON样式的数据存储,支持动态查询,完全索引。MongoDB是NoSQL数据库的一种,主要用于处理大型、半结构化或无结构化的数据。以下是MongoDB数据库的一些关键特点和优势&a…...
Leetcode 142. 环形链表 II和Leetcode 242. 有效的字母异位词
文章目录 Leetcode 142. 环形链表 II题目描述C语言题解解题思路 Leetcode 242. 有效的字母异位词题目描述C语言题解和思路解题思路 Leetcode 142. 环形链表 II 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返…...
【嵌入式DIY实例】-MODBUS串行通信
MODBUS串行通信 文章目录 MODBUS串行通信1、什么是RS-4852、MAX485 TTL转RS485转换器3、硬件准备4、代码实现4.1 主机和从机之间简单通信4.2 主/从机之间LED控制在本文中,我们将介绍如何使用 MAX485 MODBUS 在Arduino之间进行串行通信。 我们将使用 Arduino nano 板和 MODBUS …...
入门用Hive构建数据仓库
在当今数据爆炸的时代,构建高效的数据仓库是企业实现数据驱动决策的关键。Apache Hive 是一个基于 Hadoop 的数据仓库工具,可以轻松地进行数据存储、查询和分析。本文将介绍什么是 Hive、为什么选择 Hive 构建数据仓库、如何搭建 Hive 环境以及如何在 Hi…...
【计算机网络】会话层
负责维护两个会话主机之间链接的建立、管理和终止,以及数据的交换。 会话控制:决策该由谁来传递数据 令牌管理:禁止双方同时执行一个关键动作 同步功能:在一个长的传输过程中设置一些断点,以便系统崩溃后能恢复至崩…...
springboot实现七牛云的文件上传下载
一:依赖包 <dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><qiniu-java-sdk.version>7.7.0</qiniu-java-sdk.version></dependency>二:具体实现 RestController RequestMapping…...
【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(六)- 向量内存一致性模型
1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容: 这是一份关于向量扩展的详细技术文档,内容覆盖了向量指令集的多个关键方面,如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…...
Lvgl9 WindowsSimulator Visual Studio2017
因为在操作过程中遇到了一些错误,所以将操作及解决问题的过程记录下来。 一、下载lv_port_pc_visual_studio github链接:GitHub - lvgl/lv_port_pc_visual_studio: Visual Studio projects for LVGL embedded graphics library. Recommended on Windows. Linux su…...
【STL】链表(list)
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个…...
node.js常用指令
1、node:启动 Node.js REPL(交互式解释器)。 node 2、node [文件名]:执行指定的 JavaScript 文件。 node app.js 3、npm init:初始化一个新的 Node.js 项目,生成 package.json 文件。 此命令会创建一个…...
Flutter第六弹 基础列表ListView
目标: 1)Flutter有哪些常用的列表组建 2)怎么定制列表项Item? 一、ListView简介 使用标准的 ListView 构造方法非常适合只有少量数据的列表。我们还将使用内置的 ListTile widget 来给我们的条目提供可视化结构。ListView支持…...
【考研经验贴】24考研860软件工程佛系上岸经验分享【丰富简历、初复试攻略、导师志愿、资料汇总】
😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文讲解24考研860软件工程佛系上岸经验分享【丰富简历、初复试攻略、导师志愿、资料汇总】,期待与你一同探索、学习、进步,一起卷起来叭! 目…...
15-1-Flex布局
个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 Flex布局1 Flex容器和Flex项目2 Flex 容器属性2.1 主轴的方向2.2 主轴对齐方式…...
深入浅出 -- 系统架构之负载均衡Nginx的性能优化
一、Nginx性能优化 到这里文章的篇幅较长了,最后再来聊一下关于Nginx的性能优化,主要就简单说说收益最高的几个优化项,在这块就不再展开叙述了,毕竟影响性能都有多方面原因导致的,比如网络、服务器硬件、操作系统、后端…...
AI大模型下的策略模式与模板方法模式对比解析
🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章:设计模式深度解析:AI大模型下…...
前端| 富文本显示不全的解决方法
背景 前置条件:编辑器wangEditor vue项目 在pc端进行了富文本操作, 将word内容复制到编辑器中, 进行发布, pc端正常, 在手机端展示的时候 显示不全 分析 根据h5端编辑器内容的数据展示, 看到有一些样式造…...
数据结构——链表
目录 一、链表 1、单向链表 单向链表的遍历方式: 2、循环链表 3、双向链表 二、自行车停放(双向链表) 一、链表 链表是由许多相同数据类型的数据项按特定顺序排列而成的线性表特性:存放的位置是不连续且随机的,动…...
uniapp使用vuex
1、uniapp中使用vuex_uniapp使用vuex-CSDN博客 2、uniapp中使用vuex(store)模块的例子 - 简书 (jianshu.com) 3、vuex介绍及使用指南(面向实战)_vuex 实战应用-CSDN博客...
C++从入门到精通——this指针
this指针 前言一、this指针的引出问题 二、this指针的特性三、例题什么时候会出现编译报错什么时候会出现运行崩溃this指针存在哪里this指针可以为空吗 四、C语言和C实现Stack的对比C语言实现C实现 前言 this指针是一个特殊的指针,在C类的成员函数中使用。它指向调…...
Hive3.0.0建库表命令测试
Hive创建表格格式如下: create [external] table [if not exists] table_name [(col_name data_type [comment col_comment],)] [comment table_comment] [partitioned by(col_name data_type [comment col_comment],)] [clustered by (col_name,col_name,...)…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
