MongoDB 作为一款非关系型数据库很适合在爬虫上使用,操作简单易上手,本篇博客主要就是记录 MongoDB 在 python 上的库 mongodb 的一些使用方法。
使用 pymongo 之前要确保电脑上已经安装好了 MongoDB 数据库并启动了服务并且安装好了 pymongo 库。
连接数据库
1 | from pymongo import MongoClient |
需要注意的是在连接数据库和集合时,如果连接的对象不存在将会被直接创建而不是报错,所以数据库和集合的创建也可以通过这种方式。连接上数据库之后就是一些基本的增删改查操作了
相关操作
插入
pymongo 的增操作总共有三种方式 insert()
, insert_one()
, insert_many()
pymongo 插入的数据一般都是字典格式,为了方便描述举两个例子
1 | user1 = {'name':'a','gender':'female','age':18} |
比如说现在要向 user 集合中插入数据则可以使用以下语句
1 | # 插入一个数据 |
insert() 方法现在不被推荐使用,官方推荐使用 insert_one() 和 insert_many() 方法,这两个方法的使用和前面 insert() 方法对于单个和多个元素的使用并没有什么区别,唯一的区别就是返回值不同,insert_one() 和 insert_many() 方法返回的是一个 InsertManyResult 类型的对象,如果要查看插入对象的 _id 则需要调用 inserted_id 和 inserted_ids 来查看插入的元素的 _id 值
删除
1 | # 若不加参数将会删除所有数据 |
修改
mongodb 中的数据修改有 update 和 save 两种方法。
update 命令
update命令格式:
db.collection.update(criteria,objNew,upsert,multi)
参数说明:
criteria:查询条件
objNew:update对象和一些更新操作符
upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。
multi:默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。
示例:
把 age 大于 18 的 name 改为 adult
1 | user.update({'age':{'$gt':18}},{$set:{'name':'adult'}}) |
由于没有指定 multi 参数,所以默认只修改第一条记录,否则会将所有符合条件的记录全部修改。
update 的数据更新修饰符
1.$inc
用法:{$inc:{field:value}}
作用:对一个数字字段的某个field增加value
示例:将 name 值为 a 的记录的 age 增加 5
1 | user.update({'name':'a'},{'$inc':{'age':5}}) |
2.$set
用法:{$set:{field:value}}
作用:把文档中某个字段field的值设为value
示例:将 name 值为 a 的记录的 age 设为 17
1 | user.update({'name':'a'},{'$set'{'age':17}}) |
3.$unset
用法:{$unset:{field:1}}
作用:删除某个字段field
示例:删除 nsme 为 b 的记录的 age 字段
1 | user.update({'name':'b'},{'$unset':{'age':''}}) |
删除字段时只要将字段名称给出即可,后面的 value 可以使任意值
$rename
用法:{$rename:{old_field_name:new_field_name}}
作用:对字段进行重命名
示例:将 name 值为a 的记录的 sex 字段改为 gender
1 | user.update({'name':'a'},{'$rename':{'sex':'gender'}}) |
查询
pymongo 的查询语句有 find() 和 find_one() 两种方法,find_one() 只能得到一个查询结果,find() 方法可以得到多条结果,当然也可以只得到一个结果
1 | result1 = user.find({'name':'a','age':18}) |
以上语句为精确查询,除了这种方法外还可以使用按条件的模糊查询。
一些查询关键字如下:
$ne–>不等于
$gt–>大于
$gte–>大于等于
$lt–>小于
$lte–>小于等于
$in–>在范围内
$nin–>不在范围内
$exists–>是否存在字段
1 | # 查询姓名不为 a 的项 |
将 MongoDB 中的数据导出
数据导出需要借助 MongoDB 自带的工具 mongoexport ,这个工具存放在 MongoDB 安装位置的 bin 目录下。需要使用命令行运行。
参数的含义
-h,–host :代表远程连接的数据库地址,默认连接本地Mongo数据库;
–port:代表远程连接的数据库的端口,默认连接的远程端口27017;
-u,–username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号;
-p,–password:代表连接数据库的账号对应的密码;
-d,–db:代表连接的数据库;
-c,–collection:代表连接数据库中的集合;
-f, –fields:代表集合中的字段,可以根据设置选择导出的字段;
–type:代表导出输出的文件类型,包括csv和json文件,默认导出为json格式
-o, –out:代表导出的文件名,可以指定保存路径;
-q, –query:代表查询条件;
–skip:跳过指定数量的数据;
–limit:读取指定数量的数据记录;
–sort:对数据进行排序,可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列,如sort({KEY:1})。
示例:将本地数据库 data 下的集合 test 中的数据全部导出
1 | mongoexport -d data -c test -f name,age,gender --csv -o test.csv |
执行上述命令后,会将 test 集合中的 name,age,gender 字段全部导出,需要注意的是,若要将数据导出为 csv 格式的文件则必须要指定导出的字段,