MongoDB 是一款面向文档型的 NoSQL 数据库,是一个基于分布式文件存储的开源的非关系型数据库系统,其内容是以 K/V 形式存储,结构不固定,它的字段值可以包含其他文档、数组和文档数组等。其采用的 BSON(二进制 JSON )的数据结构,可以提高存储和扫描效率,但空间开销会有些大。今天就为大家简单介绍下在 Python 中使用 MongoDB 。
安装 PyMongo 库
在 Python 中操作 MongoDB ,需要使用 PyMongo 库,执行如下命令安装:
pip3 install pymongo连接 MongoDB 数据库
连接时需要使用 PyMongo 库里面的 MongoClient 模块,有两种方式可以创建连接,默认只需要传入IP和端口号即可。如果数据库存在账号密码,则需要指定连接的数据库,并进行鉴权才能连接成功。
#导入 MongoClient 模块MongoDB 数据库操作
成功连接数据库,接下来我们开始介绍通过 MongoClient 模块如何对 mongoDB 数据库进行 CURD 的操作。
获取数据库和集合
首先要指定需要操作的数据库和集合,这里的数据库可以对应为 Mysql 的 DataBase,集合对应为 Mysql 的 Table。需要注意的是在 mongoDB 中,不需要提前创建数据库和集合,在你操作它们时如果没有则会自动创建,但都是延时创建的,在添加 Document 时才会真正创建。
# 指定操作数据库的两种方式数据的插入操作
在 MongoDB 中,每条数据其实都有一个 _id 属性作为唯一标识。如果没有显式指明该属性,MongoDB 会自动产生一个 ObjectId 类型的 _id 属性,insert() 方法会在执行后返回 _id 值。不过在 PyMongo 3.x 版本中,官方已经不推荐使用 insert() 方法,而是推荐使用insert_one() 和 insert_many() 方法来分别插入单条记录和多条记录。
# 要插入到集合中的对象数据的查询操作
查询需要使用 find_one() 或 find() 方法,其中 find_one() 查询得到的是单个结果,即一条记录,find() 则返回一个生成器对象。下面我们就来查询上面刚插入的数据,如果查询不到数据则返回 None ,代码如下:
# 通过条件查询一条记录,如果不存在则返回None上面查询条件中我们用到了 $gt 的比较运算符,关于查询条件中的比较运算符和功能运算符对照表如下:
| 符号 | 含义 | 举例 |
|---|---|---|
| $gt | 大于 | {'page': |
| $lt | 小于 | |
| $lte | 小于等于 | |
| $gte | 大于等于 | |
| $ne | 不等于 | |
| $in | 在范围内 | {'page': {'$in': [50, 100]}} |
| $nin | 不在范围内 | {'page': {'$nin': [50, 100]}} |
| $regex | 匹配正则表达式 | {'name': {'$regex': '^张.*'}} |
| $exists | 属性是否存在 | {'name': {'$exists': True}} |
| $type | 类型判断 | {'name': {'$type': 'string'}} |
| $mod | 数字模操作 | {'page': {'$mod': [80, 10]}} |
| $text | 文本查询 | {'$text': {'$search': 'Java'}} |
| $where | 高级条件查询 | {'$where': 'obj. author == obj. full_name'} |
数据的更新操作
更新操作和插入操作类似,PyMongo 提供了两种更新方法,即 update_one() 和 update_many() 方法,其中 update_one() 方法只会更新满足条件的第一条记录。
注意:
如果使用 $set,则只更新 book 对象内存在的字段,如果更新前还有其他字段,则不更新也不删除。
如果不使用 $set,则会把更新前的数据全部用 book 对象替换,如果原本存在其他字段则会被删除。
# 查询一条记录集合的删除操作
删除数据同样推荐使用两个方法 delete_one() 和 delete_many() ,其中 delete_one() 为删除第一条符合条件的记录。具体操作代码如下:
# 删除满足条件的第一条记录其他数据库操作
除了以上标准的数据库操作外,PyMongo 还提供了以下通用且方便的操作方法,比如 limit() 方法用来读取指定数量的数据skip() 方法用来跳过指定数量的数据等,具体请看如下代码:
# 查询返回满足条件的记录然后删除注意:在数据量在在千万、亿级别庞大的时候,查询时最好
skip()的值不要太大,这样很可能导致内存溢出。
数据索引操作
默认情况下,数据插入时已经有一个 _id 索引了,当然我们还可以创建自定义索引。
# unique=True时,创建一个唯一索引,索引字段插入相同值时会自动报错,默认为False总结
本文为大家介绍了 Python 中如何创建连接 MongoDB 数据库,并通过代码的方式展示了对 MongoDB 数据的增删改查以及排序索引等操作,通过以上学习个人感觉操作起来还是比较简单方便的。今天就先介绍到这里,以后还会为大家介绍其他数据库的操作。
参考
PyMongo 文档:https://pymongo.readthedocs.io/en/stable/