上一篇推文中我们讲了Python与关系型数据库MYSQL的交互,这一篇我们来讲一个非关系型数据库——MongoDB。
什么是MongoDB
MongoDB是由C++编写的一个开源数据库系统,它将数据存储为一个文档,数据结构为键值对,类似JSON对象,也可以当作Python的字典来看待
与 MYSQL 对比:
MYSQL
MongoDB
数据库 (database)
数据库 (database)
表 (table)
集合 (collection)
记录 (record)
文档对象 (document)
MongoDB 的集合对应 MYSQL 的表的概念,但是集合里没有行、列、关系之分,
如果在MYSQL中添加一个字段,我们可能会考虑新建一张表,添加对应的字段,再与旧表关联,但是在MongDB中直接对文档增加字段非常方便
看到这里可能有读者认为 MongDB 要全面优于 MYSQL ,但其实两个数据库各有优势,具体内容自行查阅,这里就不赘述了
如何安装MongoDB
曾经,MongoDB是很难安装的,半年前我第一次接触MongoDB的时候,照着网上教程装了好几次都失败了,最后跟着知乎的一个专栏文章才安装成功
半年后的今天,我又探索安装了好几次,发现安装步骤非常简单,无脑下一步就行了。
打开安装包
选择日志和数据的存放路径
这个 MongoDB Compass 一定要取消勾选,不然等一天也装不完
不出意外的话,不到一分钟就装好了
在你MongoDB的 bin 目录下 运行 mongo,如上图所示,则证明安装成功
当然,我们不能每次都要到 bin 目录下才运行 mongo,这样太麻烦了,所以添加一下环境变量
复制路径,粘贴到环境变量里
这样,在任何路径下,我们都可以通过输入 mongo 来启动 MongoDB
MongoDB可视化工具
用命令行来操作来查看数据不够方便,我们需要安装一个可视化工具来更直观地监控数据,这里我选的是 Robo 3T ,全平台支持
打开 Robo 3T 连接,取个名字,测试一下是否能成功连接
成功的话,保存一下,下次进入就可以直接连接了
按 F5 或者 ctrl+R 可以刷新数据库,查看数据变动
pymongo的使用
建立连接,指定数据库、集合
import
增: insert_one(), insert_many()
player1
MongoDB会自动添加一个 _id 字段
删: delete_one()是删除第一个符合条件的数据,delete_many()是删除所有符合条件的数据
for
查: find_one(), find(),需要注意的是 find_one返回的是一个结果,而 find() 返回的是一个生成器,要通过遍历才能得到结果
print
可嵌套正则,查找名字开头不是D的球员,并按球队(字母顺序)排序
for
改: update_one(), update_many(); 第一个参数是条件,第二个参数是修改内容,必须以 $ 类型操作符作为键名
collection
upsert 参数默认为 False,意为不增加,如果满足第一个参数(条件)的文档不存在,而 upsert = True, 则直接添加这个文档(document), 即多增加一条记录
聪明的同学肯定想到了,我们能否用 update_one 来取代 insert_one 以避免重复值的插入呢?
没错,答案是可以的。
用 insert_one的话,即使是重复的数据也会插入,一共产生4个文档
player1
而用 update_one 只产生3个文档
player_list
除正则外,很多其它符号,这些符号不是pymongo独有的,而是MongDB本身就支持的,以下是崔大整理的一些常用的:
更多详细用法可参考 MongoDB官方文档