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()