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,...)…...
一起学习python——基础篇(7)
今天讲一下python的函数。 函数是什么?函数是一段独立的代码块,这块代码是为了实现一些功能,而这个代码块只有在被调用时才能运行。 在 Python 中,使用 def 关键字定义函数: 函数的固定结构就是 def(关键字)函数名字…...
【LeetCode热题100】74. 搜索二维矩阵(二分)
一.题目要求 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,…...
Android OkHttp
目录 1.build.gradle 2.基本使用 3.POST请求 4.Builder构建者 1.build.gradle implementation("com.squareup.okhttp3:okhttp:4.12.0") 2.基本使用 GET同步请求 public void getSync(View view) {new Thread(){Overridepublic void run() {Request request …...
Java常用API_正则表达式_字符串的替换和截取方法——小练习
我将通过一个练习题来展示这两个方法 练习题: 有一段字符串:小张qwertyuiop123小李asdfghjkl456小王 要求1:把字符串中三个姓名之间的字母替换成vs 要求2:把字符串中的三个姓名切割出来 编写代码: public class Tes…...
从头开发一个RISC-V的操作系统(四)嵌入式开发介绍
文章目录 前提嵌入式开发交叉编译GDB调试,QEMU,MAKEFILE练习 目标:通过这一个系列课程的学习,开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提 这个系列的大部分文章和知识来自于:[完结] 循序渐进&#x…...
Web漏洞-文件上传常见验证
后缀名:类型,文件头等 后缀名:黑白名单 文件类型:MIME信息 文件头:内容头信息 常见黑名单(明确不允许上传的格式后缀):asp、php、jsp、aspx、cgi、war (如果没有完整…...
如何在 Node.js 中使用 bcrypt 对密码进行哈希处理
在网页开发领域中,安全性至关重要,特别是涉及到用户凭据如密码时。在网页开发中至关重要的一个安全程序是密码哈希处理。 密码哈希处理确保明文密码在数据库受到攻击时也难以被攻击者找到。但并非所有的哈希方法都是一样的,这就是 bcrypt 突…...
嵌入式学习49-单片机2
指令周期 1M 机器周期 12M (晶体震荡器产生) 中断两种方式 …...
汽车EDI:如何与奔驰建立EDI连接?
梅赛德斯-奔驰是世界闻名的豪华汽车品牌,无论是技术实力还是历史底蕴都在全球汽车主机厂中居于领先位置。奔驰拥有多种车型,多元化的产品布局不仅满足了不同用户画像的需求,也对其供应链体系有着极大的考验。 本文将为大家介绍梅赛德斯-奔驰乘…...
性能分析--内存知识
内存相关知识 计算机中与CPU进行数据交换的桥梁。内存的速度,比CPU的速度要慢很多。比磁盘速度要快很多。内存中存放数据,一旦断电就会消失。linux系统的 /proc路径下的文件,都是内存文件。内存大小,一般 是GB为单位。 现在都操作…...
合肥网站建设推广/百度快速排名技术培训
http://poj.org/problem?id1984 这是一道经典的带权并查集,每插入一个点,维护两个权值的数组,代表关于根节点的x坐标和y坐标, 记录这两个权值数组就可以了。W是x减,E是x加,N是y减,S是y加。 合…...
备案中又需要建设网站/百度竞价推广登陆
原标题:英伟达宣布光追版《我的世界》即将上线 支持玩家转移自己的建筑物英伟达光追效果的强大相信各位玩家早就已经领略过了。近日,英伟达宣布玩家期待已久的《我的世界》光追版即将在Win10平台与玩家们见面,一起来了解下吧。英伟达表示&…...
深圳网站建设_企业网站设计定制/百度获客
欢迎关注”生信修炼手册”!lnc2Catlas是一个肿瘤相关的lncRNA数据库,网址如下https://lnc2catlas.bioinfotech.org/home/通过以下三种计算方式来分析肿瘤相关的lncRNA通过RNAsnp预测SNP对lncRNA二级结构的影响,如果一个疾病相关的SNP位点位于某个lncRNA上…...
手表网站 美国/百度知道入口
【链接】 我是链接,点我呀:) 【题意】 在这里输入题意 【题解】 可以直接一层循环枚举。 也可以像我这样用一个数组来存y*b有哪些。 当然。感觉这样做写麻烦了。。 【代码】 /*1.Shoud it use long long ?2.Have you ever test several sample(at least therr) yourself?3.…...
dede网站logo怎么改/百度竞价排名算法
要制作 CentOS JDK 镜像,您可以使用 Dockerfile 和 docker build 命令。 Dockerfile 是一个文本文件,其中包含要在镜像中运行的命令。 以下是一个简单的 Dockerfile 示例,用于创建一个包含 OpenJDK 8 和 CentOS 7 的镜像: FROM ce…...
自己搭建聊天软件/浙江seo外包
UE4视频教程进行到了mysql(1.1),tf1(1.1),oss(9.4),蓝图反射(1.3), 终于稳下心来了, 5月29日,终于稳下来了,哈哈。全员降薪真是挫伤积极性的大杀器。 8:27–8:36,8:45-9…...