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,...)…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
虚幻基础:角色旋转
能帮到你的话,就给个赞吧 😘 文章目录 移动组件使用控制器所需旋转:组件 使用 控制器旋转将旋转朝向运动:组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转:必须移动才能旋转,不移动不旋转控制器…...