Python MongoDB复习第一章

Python 可以在数据库应用程序中使用。

最受欢迎的 NoSQL 数据库之一是 MongoDB。

MongoDB

MongoDB 将数据存储在类似 JSON 的文档中,这使得数据库非常灵活和可伸缩。

为了能够测试本教程中的代码示例,您需要访问 MongoDB 数据库。

您可以在 https://www.mongodb.com 下载免费的 MongoDB 数据库。

PyMongo

Python 需要 MongoDB 驱动程序来访问 MongoDB 数据库。

在本教程中,我们会使用 MongoDB 驱动程序 "PyMongo"。

我们建议您使用 PIP 安装 "PyMongo"。

PIP 很可能已经安装在 Python 环境中。

将命令行导航到 PIP 的位置,然后键入以下内容:

下载并安装 "PyMongo":

python -m pip install pymongo

现在您已经下载并安装了 mongoDB 驱动程序。

测试 PyMongo

如需测试安装是否成功,或者您是否已安装 "pymongo",请创建一张包含以下内容的 Python 页面:

demo_mongodb_test.py:

import pymongo

如果执行上述代码没有错误,则 "pymongo" 已安装就绪。

Python MongoDB 创建数据库

创建数据库

要在 MongoDB 中创建数据库,首先要创建 MongoClient 对象,然后使用正确的 IP 地址和要创建的数据库的名称指定连接 URL。

如果数据库不存在,MongoDB 将创建数据库并建立连接。

实例

创建名为 "mydatabase" 的数据库:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

mydb = myclient["mydatabase"]

重要说明:在 MongoDB 中,数据库在获取内容之前不会创建!

在实际创建数据库(和集合)之前,MongoDB 会一直等待您创建至少有一个文档(记录)的集合(表)。

检查数据库是否存在

请记住:在 MongoDB 中,数据库在获取内容之前不会创建,因此如果这是您第一次创建数据库,则应在检查数据库是否存在之前完成接下来的两章(创建集合和创建文档)!

您可以通过列出系统中的所有数据库来检查数据库是否存在:

实例

返回系统中的数据库列表:

print(myclient.list_database_names())

或者您可以按名称检查特定数据库:

实例

检查 "mydatabase" 是否存在:

dblist = myclient.list_database_names()
if "mydatabase" in dblist:
  print("The database exists.")

Python MongoDB 创建集合

MongoDB 中的集合与 SQL 数据库中的表相同。

创建集合

要在 MongoDB 中创建集合,请使用数据库对象并指定要创建的集合的名称。

如果它不存在,MongoDB 会创建该集合。

实例

创建名为 "customers" 的集合:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]

mycol = mydb["customers"]

重要提示:在 MongoDB 中,集合在获得内容之前不会被创建!

在实际创建集合之前,MongoDB 会等待直到您已插入文档。

检查集合是否存在

请记住:在 MongoDB 中,集合在获取内容之前不会创建,因此如果这是您第一次创建集合,则应在检查集合是否存在之前完成下一章(创建文档)!

您可以通过列出所有集合来检查数据库中是否存在集合:

实例

返回数据库中所有集合的列表:

print(mydb.list_collection_names())

或者您可以按名称检查特定集合:

实例

检查 "customers" 集合是否存在:

collist = mydb.list_collection_names()
if "customers" in collist:
  print("The collection exists.")

Python MongoDB 插入文档

MongoDB 中的文档与 SQL 数据库中的记录相同。

插入集合

要在 MongoDB 中把记录或我们所称的文档插入集合,我们使用 insert_one() 方法。

insert_one() 方法的第一个参数是字典,其中包含希望插入文档中的每个字段名称和值。

实例

在 "customers" 集合中插入记录:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

mydict = { "name": "Bill", "address": "Highway 37" }

x = mycol.insert_one(mydict)

返回 _id 字段

insert_one() 方法返回 InsertOneResult 对象,该对象拥有属性 inserted_id,用于保存插入文档的 id。

实例

在 "customers" 集合中插入另一条记录,并返回 _id 字段的值:

mydict = { "name": "Peter", "address": "Lowstreet 27" }

x = mycol.insert_one(mydict)

print(x.inserted_id)

如果您没有指定 _id 字段,那么 MongoDB 将为您添加一个,并为每个文档分配一个唯一的 ID。

在上例中,没有指定 _id 字段,因此 MongoDB 为记录(文档)分配了唯一的 _id。

插入多个文档

要将多个文档插入 MongoDB 中的集合,我们使用 insert_many() 方法。

insert_many() 方法的第一个参数是包含字典的列表,其中包含要插入的数据:

实例

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

mylist = [
  { "name": "Amy", "address": "Apple st 652"},
  { "name": "Hannah", "address": "Mountain 21"},
  { "name": "Michael", "address": "Valley 345"},
  { "name": "Sandy", "address": "Ocean blvd 2"},
  { "name": "Betty", "address": "Green Grass 1"},
  { "name": "Richard", "address": "Sky st 331"},
  { "name": "Susan", "address": "One way 98"},
  { "name": "Vicky", "address": "Yellow Garden 2"},
  { "name": "Ben", "address": "Park Lane 38"},
  { "name": "William", "address": "Central st 954"},
  { "name": "Chuck", "address": "Main Road 989"},
  { "name": "Viola", "address": "Sideway 1633"}
]

x = mycol.insert_many(mylist)

# 打印被插入文档的  _id 值列表:
print(x.inserted_ids)

insert_many() 方法返回 InsertManyResult 对象,该对象拥有属性 inserted_ids,用于保存被插入文档的 id。

插入带有指定 ID 的多个文档

如果您不希望 MongoDB 为您的文档分配唯一 id,则可以在插入文档时指定 _id 字段。

请记住,值必须是唯一的。两个文件不能有相同的 _id。

实例

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

mylist = [
  { "_id": 1, "name": "John", "address": "Highway 37"},
  { "_id": 2, "name": "Peter", "address": "Lowstreet 27"},
  { "_id": 3, "name": "Amy", "address": "Apple st 652"},
  { "_id": 4, "name": "Hannah", "address": "Mountain 21"},
  { "_id": 5, "name": "Michael", "address": "Valley 345"},
  { "_id": 6, "name": "Sandy", "address": "Ocean blvd 2"},
  { "_id": 7, "name": "Betty", "address": "Green Grass 1"},
  { "_id": 8, "name": "Richard", "address": "Sky st 331"},
  { "_id": 9, "name": "Susan", "address": "One way 98"},
  { "_id": 10, "name": "Vicky", "address": "Yellow Garden 2"},
  { "_id": 11, "name": "Ben", "address": "Park Lane 38"},
  { "_id": 12, "name": "William", "address": "Central st 954"},
  { "_id": 13, "name": "Chuck", "address": "Main Road 989"},
  { "_id": 14, "name": "Viola", "address": "Sideway 1633"}
]

x = mycol.insert_many(mylist)

# 打印被插入文档的  _id 值列表:
print(x.inserted_ids)

Python MongoDB 查找

在 MongoDB 中,我们使用 find 和 findOne 方法来查找集合中的数据。

就像 SELECT 语句用于查找 MySQL 数据库中的表中的数据一样。

查找一项

如需在 MongoDB 中的集合中选取数据,我们可以使用 find_one() 方法。

find_one() 方法返回选择中的第一个匹配项。

实例

查找 customers 集合中的首个文档:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

x = mycol.find_one()

print(x)

查找全部

如需从 MongoDB 中的表中选取数据,我们还可以使用 find() 方法。

find() 方法返回选择中的所有匹配项。

find() 方法的第一个参数是 query 对象。在这个例子中,我们用了一个空的 query 对象,它会选取集合中的所有文档。

find() 方法没有参数提供与 MySQL 中的 SELECT * 相同的结果。

实例

返回 "customers" 集合中的所有文档,并打印每个文档:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

for x in mycol.find():
  print(x)

只返回某些字段

find() 方法的第二个参数是描述包含在结果中字段的对象。

此参数是可选的,如果省略,则所有字段都将包含在结果中。

实例

只返回姓名和地址,而不是 _ids:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

for x in mycol.find({},{ "_id": 0, "name": 1, "address": 1 }):
  print(x)

不允许在同一对象中同时指定 0 和 1 值(除非其中一个字段是 _id 字段)。如果指定值为 0 的字段,则所有其他字段的值为 1,反之亦然:

实例

这个例子从结果中排出 "address":

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

for x in mycol.find({},{ "address": 0 }):
  print(x)

实例

如果在同一对象中同时指定 0 和 1 值,则会出现错误(除非其中一个字段是 _id 字段):

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

for x in mycol.find({},{ "name": 1, "address": 0 }):
  print(x)

Python MongoDB 查询

筛选结果

在集合中查找文档时,您能够使用 query 对象过滤结果。

find() 方法的第一个参数是 query 对象,用于限定搜索。

实例

查找地址为 "Park Lane 38" 的文档:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

myquery = { "address": "Park Lane 38" }

mydoc = mycol.find(myquery)

for x in mydoc:
  print(x)

高级查询

如需进行高级查询,可以使用修饰符作为查询对象中的值。

例如,要查找 "address" 字段以字母 "S" 或更高(按字母顺序)开头的文档,请使用大于修饰符:{"$gt": "S"}

实例

查找地址以字母 "S" 或更高开头的文档:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

myquery = { "address": { "$gt": "S" } }

mydoc = mycol.find(myquery)

for x in mydoc:
  print(x)

使用正则表达式来筛选

您也可以将正则表达式用作修饰符。

正则表达式只能用于查询字符串。

如果只查找 "address" 字段以字母 "S" 开头的文档,请使用正则表达式 {"$regex": "^S"}

实例

查找地址以字母 "S" 开头的文档:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

myquery = { "address": { "$regex": "^S" } }

mydoc = mycol.find(myquery)

for x in mydoc:
  print(x)

Python MongoDB 排序

结果排序

请使用 sort() 方法按升序或降序对结果进行排序。

sort() 方法为 "fieldname"(字段名称)提供一个参数,为 "direction"(方向)提供一个参数(升序是默认方向)。

实例

按姓名的字母顺序对结果进行排序:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

mydoc = mycol.find().sort("name")

for x in mydoc:
  print(x)

降序排序

使用值 -1 作为第二个参数进行降序排序。

sort("name", 1) # 升序
sort("name", -1) # 降序

实例

按名称的逆向字母顺序对结果进行排序:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

mydoc = mycol.find().sort("name", -1)

for x in mydoc:
  print(x)

本篇MongoDB复习的第一篇文章就到这吧,接下来第二篇马上开始,请一键三连

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js中的状态管理:理解和使用Vuex

目录 前言 Vue.js 样式绑定 Vue.js class class 属性绑定 实例 1 实例 2 实例 3 实例 4 数组语法 实例 5 实例 6 Vue.js style(内联样式) 实例 7 实例 8 实例 9 Vue.js 组件 全局组件 全局组件实例 局部组件 局部组件实例 Prop Prop 实例 动态 Prop Pro…

力扣 98. 验证二叉搜索树

题目来源:https://leetcode.cn/problems/validate-binary-search-tree/description/ C题解1:中序遍历,递归法。获取数组,如果是递增则返回true,否则返回false。 class Solution { public:void zhongxu(TreeNode* node…

vue+leaflet笔记之热力图

vueleaflet笔记之热力图 文章目录 vueleaflet笔记之热力图开发环境代码简介插件简介与安装使用简介 详细源码(Vue3) 本文介绍了Web端使用 Leaflet开发库展示热力图方法 (底图来源:天地图),结合leaflet.heat插件可以很容易的做出热力图,通过调整其配置参…

房贷计算器——新增选择还款方式

房贷计算器——新增选择还款方式 #!/usr/bin/env python # coding: utf-8# In[4]: 文字‘房贷计算器’ 文字‘贷款总金额’:输入框 文字‘贷款期限’:输入框 文字‘年利率’:输入框 按钮‘开始计算’ 返回: 月供 总利息 from tki…

【工作记录】基于CSS+JS可拖拽改变大小、可吸附到边界的DIV

记录一段实现可拖拽、可自动吸附到边界的代码。 <!DOCTYPE html> <html lang"en"> <head><style>body {overflow: hidden;}#pane {position: absolute;width: 45%;height: 45%;top: 20%;left: 20%;margin: 0;padding: 0;z-index: 99;border…

基于深度学习的高精度塑料瓶检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度塑料瓶检测识别系统可用于日常生活中或野外来检测与定位塑料瓶目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的塑料瓶目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检…

maven-mvnd(新版maven)

引言&#xff1a; Maven和Gradle几乎包含了所有Java项目的构建。 而目前绝大部分的Java项目都是使用Maven的方式&#xff0c;Maven对比Gradle的劣势很明显&#xff0c;就是太慢了&#xff01; 一、maven-mvnd是什么&#xff1f; maven-mvnd是Apache Maven团队开发的maven的…

idea生成serialVersionUID序列号

设置idea file->settings,搜索serialVersionUID&#xff0c;勾选框起来的两项 实体类实现Serializable接口 Data public class User implements Serializable { }鼠标放到类名上 点击提示的uid 生成的uid 结束&#xff01; hy:17 生活是一面镜子&#xff0c;给予我们…

YOLOv5/v7 添加注意力机制,30多种模块分析⑦,CCN模块,GAMAttention模块

目录 一、注意力机制介绍1、什么是注意力机制&#xff1f;2、注意力机制的分类3、注意力机制的核心 二、CCN模块1、CCN模块的原理2、实验结果3、应用示例 三、GAMAttention模块1、GAMAttention模块的原理2、实验结果3、应用示例 大家好&#xff0c;我是哪吒。 &#x1f3c6;本…

Kafka架构

5.kafka系统的架构 5.1主题topic和分区partition topic Kafka中存储数据的逻辑分类&#xff1b;你可以理解为数据库中“表”的概念&#xff1b; 比如&#xff0c;将app端日志、微信小程序端日志、业务库订单表数据分别放入不同的topic partition分区&#xff08;提升kafka吞…

springboot基于keytool实现https的双向认证

一、环境准备 服务器信息如下&#xff1a; 操作系统说明server-one服务器1server-two服务器2 二、keytool命令解释 -genkey 表示要创建一个新的密钥。 -alias 表示 keystore 的别名。 -keyalg 表示使用的加密算法是 RSA &#xff0c;一种非对称加密算法。 -keysize 表示密…

计算机网络 - 第一章(下)

1.2_1 分层结构、协议、接口、服务_哔哩哔哩_bilibili1.2_1 分层结构、协议、接口、服务是王道计算机考研 计算机网络的第7集视频&#xff0c;该合集共计76集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。https://www.bilibili.com/video/BV19E411D78…

【vue】vue高性能虚拟滚动列表【vue2和vue3版组件封装】

项目场景&#xff1a; 当前页显示100w多条数据&#xff0c;不做分页的情况进行渲染。加载和渲染页面会非常慢&#xff0c;滚动也非常卡顿 解决方案&#xff1a; 1.渲染可视窗口的列表&#xff0c;其他列表不进行渲染。通过修改偏移量高度进行滚动列表。 2.分段插入&#xff0…

MySQL—SQL优化详解(上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

Flink入门学习(一)

Flink 1. 概述 分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架&#xff0c;用于对无界和有界数据流进行有状态计算。Flink 被设计在所有常见的集群环境中运行&#xff0c;以内存执行速度和任意规模来执行计算。 有界流&#xff1a;有定义流的开始&am…

Springboot 集成Prometheus 数据采集 使用grafana 监控报告告警 邮件配置

目录 Springboot 相关 Pom 重点包 如果有需要可以增加安全包-一般内部机房没啥事-&#xff08;非必选&#xff09; Application.yml配置文件-&#xff08;非必选&#xff09; Application.properties management.endpoints.web.exposure.include介绍 启动类 查看监控信…

用于语义图像分割的弱监督和半监督学习:弱监督期望最大化方法

这时一篇2015年的论文&#xff0c;但是他却是最早提出在语义分割中使用弱监督和半监督的方法&#xff0c;SAM的火爆证明了弱监督和半监督的学习方法也可以用在分割上。 这篇论文只有图像级标签或边界框标签作为弱/半监督学习的输入。使用期望最大化(EM)方法&#xff0c;用于弱…

【Solr】中文分词配置

提示&#xff1a;在设置中文分词前需确保已经生成过core&#xff0c;未生成core的可以使用&#xff1a;solr create -c "自定义名称"进行定义。 未分词前的效果预览&#xff1a; 下载分词器&#xff1a; 下载地址: https://mvnrepository.com/artifact/com.github.m…

Spring Cloud 之注册中心 Eureka 精讲

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

nginx配置开机启动(Windows环境)

文章目录 1、下载nginx&#xff0c;并解压2、配置nginx.conf&#xff0c;并启动Nginx3、开机自启动 1、下载nginx&#xff0c;并解压 2、配置nginx.conf&#xff0c;并启动Nginx 两种方法&#xff1a; 方法一&#xff1a;直接双击nginx.exe&#xff0c;双击后一个黑色弹窗一闪…