MongoDB数据库
0x00 介绍
MongoDB是一个面向文档存储的非关系型数据库,是用C++编写的。
MongoDB将数据存储为一个文档,数据结构由“键值对”组成,字段值
可以包含其他文档、数组及文档数组,类似于JSON对象,如下格式:
{
"name": "Scrapy爬虫网络",
"description": "做一个Scrapy爬虫达人",
"author": "["张三","李四"]",
"price": "59",
}
MongoDB与SQL对应的术语:
SQL | MongoDB | ||
术语 | 英文术语 | 术语 | 英文术语 |
数据库 | database | 数据库 | database |
表 | table | 集合 | collection |
行 | row | 文档 | document |
列 | column | 域 | field |
索引 | index | 索引 | index |
主键 | primary key | 主键 | primary key |
0x01 安装MongoDB(略)
0x02 利用python访问MongoDB数据库
1、 安装pymongo
pip install pymongo
2、 连接MongoDB数据库
import pymongo
# 方式一:使用默认的host和port
db_client = pymongo.MongoClient()
# 方式二:自定义host和port参数
db_client = pymongo.MongoClient(host="localhost", port=27017)
# 方式三:使用标准的URI连接语法
db_client = pymongo.MongoClient("mongodb://localhost:27017")
3、 指定数据库
MongoDB可以建立多个数据库,以下代码指定了名称为qidian的数据库:
db = db_client["qidian"]
db_client是上一步中得到的客户端(client)对象,db是返回的数据对象。当然还可以这样指定数据库:
db = db_client.qidian
4、 指定集合(相当于关系型数据库中的表)
以下代码指定了要操作的集合为hot:
db_collection = db['hot']
5、 插入文档
(1)插入与条件匹配的单个文档
novel = {
'name': '太初',
'author':'高楼大厦',
'form':'连载',
'type':'玄幻'
}
result = db_collection.insert_one(novel)
print(result) # InsertOneResult类型对象
print(result.inserted_id) # 添加文档的_id值,作为文档的唯一标识
(2) 插入与条件匹配的所有文档
novel1 = {
'name': '斗罗大陆',
'author':'唐家三少',
'form':'完结',
'type':'玄幻'
}
novel2 = {
'name': '帝国的崛起',
'author':'终极侧位',
'form':'连载',
'type':'都市'
}
result = db_collection.insert_many([novel1, novel2])
print(result)
6、 查询文档
(1) 查询与条件匹配的单个文档
result = db_collection.find_one({"name": "帝国的崛起"})
相当于
select * from hot where name = "帝国的崛起" LIMIT 0,1
(2) 查询所有文档
cursor = db_collection.find({})
相当于
select * from hot;
(3) 查询与条件匹配的所有文档
cursor = db_collection.find({"type": "历史"})
print(cursor)
for one in cursor:
print(one)
相当于
select * from hot where type = "历史"
7、 更新文档
(1) 更新与条件匹配的单个文档
# 查询条件
filter = {"name":"帝国的崛起"}
# 更新语句
update = {"$set":{"type":"历史"}}
# 使用update_one()方法更新文档
result = db_collection.update_one(filter, update)
print(result) # 返回UpdateResult类型的对象
print(result.raw_result) # 查看更新后的结果
filter是一个查询条件的字典,update是一个更新语句的字典,key为操作符$set,value为想要更新的字段,也是一个字典。
(2) 更新与条件匹配的所有文档
# 查询条件
filter = {"type":"历史"}
# 更新语句
update = {"$set":{"form":"完本"}}
# 使用update_many()方法更新文档
result = db_collection.update_many(filter, update)
print(result) # 返回UpdateResult类型的对象
print(result.raw_result) # 查看更新后的结果
8、 删除文档
(1) 删除与条件匹配的单个文档
result = db_collection.delete_one({"name":"太初"})
print(result)
print(result.raw_result)
(2) 删除与条件匹配的所有文档
result = db_connection.delete_many({"type":"历史"})
print(result)
print(result.raw_result)
9、 关闭数据库
db_client.close()