Python爬虫从0到1(第九天)——Python与MongoDB

本文介绍了MongoDB作为文档数据库的基本概念和在Python环境中如何进行安装、连接、创建数据库、删除数据库、创建与删除集合、插入和查询文档以及更新和删除文档的操作。文章还对比了不同类型的NoSQL数据库的特点,并提供了MongoDB操作的示例。
摘要由CSDN通过智能技术生成

Python与MongoDB

在前面的文章中我们已经学习到了如何从网站中获取到数据,接下来我们就要开始学习如何将我们从网站中获取到的数据进行保存,存储的媒介是分为很多种的,例如:文本文档、excel、json、数据库等;本章主要是介绍数据库之一的MongoDB及其简单的增删改查操作。接下来我们先通过一段小小的介绍来看看什么是数据库。

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

常见的关系型数据库有MysqlSqlServer

目前NoSQL数据库仍然没有一个统一的标准,它现在有四种大的分类:

(1)键值对存储(key-value):代表软件Redis,它的优点能够进行数据的快速查询,而缺点是需要存储数据之间的关系。

(2)列存储:代表软件Hbase,它的优点是对数据能快速查询,数据存储的扩展性强。而缺点是数据库的功能有局限性。

(3)文档数据库存储:代表软件MongoDB,它的优点是对数据结构要求不特别的严格。而缺点是查询性的性能不好,同时缺少一种统一查询语言。

(4)图形数据库存储:代表软件InfoGrid,它的优点可以方便的利用图结构相关算法进行计算。而缺点是要想得到结果必须进行整个图的计算,而且遇到不适合的数据模型时,图形数据库很难使用。

一、mongodb安装

首先在官方网站下载MongoDB安装包,下载地址
在这里插入图片描述
点击next,进入如下界面
在这里插入图片描述
勾选之后点击next,界面如下:
在这里插入图片描述
选择Custom(自定义安装),界面如下:
在这里插入图片描述
修改好安装目录(也可以不修改)之后点击next,界面如下:
在这里插入图片描述
直接next
在这里插入图片描述
然后再next
在这里插入图片描述
点击install,等待安装结束,安装完成之后添加bin目录到环境变量之中。
在这里插入图片描述
将上图所示目录添加到环境变量之中。

二、mongo常用操作

2.1 连接到mongo

打开终端(cmd),输入mongo如下图所示

在这里插入图片描述

2.2 查看数据库

查看所有数据库的语法如下

show dbs
在这里插入图片描述
可以看到默认情况下是存在三个库(安装好mongo之后自带的,不用管它的内容)。

2.3 创建数据库

创建数据库的语法格式如下:

use DATABASE_NAME

和mysql中切换数据库一样,只是在mongo中如果数据库不存在的话会创建数据库并切换到该数据库,否则直接切换到指定数据库

创建一个名为quanmou的数据库如下所示

use quanmou
在这里插入图片描述若名为quanmou的数据库不存在则创建并切换到此数据库。

注意,再查看时,并不会显示出刚刚创建的数据库,如果要显示出来,我们还需要在里面插入一条数据之后才会显示。
在这里插入图片描述

2.4 删除数据库

语法如下:

db.dropDatabase()

删除当前数据库,默认为test,可以使用db命令来查看当前数据库名。

查看当前数据库名
在这里插入图片描述
执行删除数据库的命令:
在这里插入图片描述

2.5 创建集合

在MongoDB中使用createCollection()方法来创建集合。语法格式如下

db.createCollection(name, options)

参数说明:

  • name:要创建的集合名称
  • options:可选参数,制定有关内存大小及索引的选项

options可选的参数如下所示

字段类型描述
capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
size数值(可选)为固定集合指定一个最大值,即字节数。 如果 capped 为 true,也需要指定该字段。
max数值(可选)指定固定集合中包含文档的最大数量。

在插入文档时,mongo首先检查固定集合的size字段,然后检查max字段。

在quanmou库中创建students集合:
在这里插入图片描述
如果要查看已有集合,可以使用show collectionsshow tables命令:
在这里插入图片描述
创建固定集合qmspider,集合空间大小为102400B,文档最大个数为10000。
在这里插入图片描述

2.6 删除集合

语法格式:

db.collection.drop()

返回结果:如果成功删除则返回true,否则返回false
在这里插入图片描述
可以看到集合中是不存在qmspider了的。

2.7 插入文档

MongoDB文档的数据结构和json基本是一样的,所有存储在集合中的数据都是BSON格式。BSON是一种类似于json的二进制形式的存储格式,是Binary JSON的简称。

插入的语法如下:

db.COLLECTION_NAME.insert(document)

db.COLLECTION_NAME.save(document)

  • save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne()db.collection.replaceOne() 来代替。
  • insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。

3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()。

db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:

db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)

db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:

db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

参数说明:

  • document:要写入的文档。
  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。
    向students集合中插入一个文档:
    在这里插入图片描述
    也可以将数据定义为一个变量,然后再进行插入,如下图所示:
    在这里插入图片描述
2.8 查询文档

在MongoDB中,查询文档使用的是find()方法。find()方法是以非结构化的方式来显示所有的文档。

语法格式如下:

db.collection.find(query, projection)

参数说明:

  • query:可选,使用查询操作福指定查询条件
  • projection:可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需要省略该参数即可(默认省略)

如果需要以易读的方式来读取数据,可以使用pretty()方法,语法如下:

db.collection.find().pretty()

pretty()方法以格式化的方式来显示所有文档

查询students集合中的数据:
在这里插入图片描述
也可以使用findOne()方法来返回一个文档
在这里插入图片描述

2.8.1 MongoDB 与 RDBMS Where 语句比较

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

操作格式范例RDBMS中的类似语句
等于{<key>:<value>}db.col.find({"by":"菜鸟教程"}).pretty()where by = '菜鸟教程'
小于{<key>:{$lt:<value>}}db.col.find({"likes":{$lt:50}}).pretty()where likes < 50
小于或等于{<key>:{$lte:<value>}}db.col.find({"likes":{$lte:50}}).pretty()where likes <= 50
大于{<key>:{$gt:<value>}}db.col.find({"likes":{$gt:50}}).pretty()where likes > 50
大于或等于{<key>:{$gte:<value>}}db.col.find({"likes":{$gte:50}}).pretty()where likes >= 50
不等于{<key>:{$ne:<value>}}db.col.find({"likes":{$ne:50}}).pretty()where likes != 50

MongoDB and条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。

语法格式如下:

db.collection.find({key1:value1, key2:value2}).pretty()
在这里插入图片描述

2.8.2 MongoDB OR条件

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

db.col.find(
{
   $or: [
      {key1: value1}, {key2:value2}
   ]
}
).pretty()

查询name为xiaohong或者by为quanmou的文档
在这里插入图片描述

2.8.3 and和or联合使用

语法格式:

db.collection.find({‘key1’: ‘value1’, $or:[{‘key2’:‘value2’}, {‘key3’:‘value3’}]})
在这里插入图片描述

2.9 更新文档

MongoDB 使用 update()save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。

2.9.1 update()方法

update()方法用于更新已存在的文档。语法格式如下:

db.collection.update(query,update,{upsert: boolean,multi:boolean,writeConcern:document})

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

更新students集合中的内容:
在这里插入图片描述

2.9.2 save()方法

save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。语法格式如下:

db.collection.save(document,{writeConcern:document})

参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。

以下我们可以看到将xiaofang又替换回了xiaohong
在这里插入图片描述

2.10 删除文档

在MongoDB中,remove() 函数是用来移除集合中的数据。

MongoDB 数据更新可以使用 update() 函数。在执行 remove() 函数前先执行 find() 命令来判断执行的条件是否正确,这是一个比较好的习惯。

语法格式如下:

db.collection.remove(query,{justOne:Boolean,writeConcern:document})

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

在这里插入图片描述
默认情况下删除集合中所有匹配成功的文档,也就是说此处将所有name为xiaohong的文档全部删除了,所以集合中就不再有数据存在了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

quanmoupy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值