简介
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB
启动 MongoDB
MongoDB 安装之后需要验证 MongoDB 服务,可以选择到 MongoDB 安装目录下的 bin 目录执行:
mongod --dbpath D:\MongoDB\data
上边的命令将会启动 bin 目录下的 MongoDB 服务端,而后边跟的路径则是 data 目录(不存在的话可以手动建立)。
运行 MongoDB
上边只是启动了 MongoDB 服务端,如果要使用 MongoDB 的服务,则还需要启动 MongoDB 的客户端:
- 添加数据目录:在 MongoDB 的安装目录中添加 data 目录
- 添加环境变量:为了避免每次执行 MongoDB 的命令都要定位到 bin 目录中,可以将 bin 目录添加到环境变量中
- 执行命令:在启动 MongoDB 服务段之后(管理员启动),保持终端不要关闭,然后在新的终端(管理员启动)中执行:
mongo
此时就启动了 MongoDB 的客户端,也就可以通过终端来操纵数据库。
Compass
和 MySQL 相似,同样也可以使用 GUI 来进行数据库操作,官方提供的 GUI 是 Compass,使用 GUI 的操作就简单很多了。想要了解的话可以自行下载安装使用。
将 MongoDB 制作为 Windows 服务
启动 MongoDB 之后,如果需要一直使用 MongoDB 的服务,该终端就不能关闭,而且在启动的时候需要指定 data 的路径,这是有点麻烦的。而通过将之制作成 Windows 服务就能够有效避免该问题。步骤为:
- 创建配置文件:在 mongodb 的安装路径下创建配置文件 configure.cfg,内容为:
logpath=D:\MongoDB\log\mongod.log
dbpath=D:\MongoDB\data
logpath 对应的是日志路径,dbpath 对应的是数据库路径。
- 安装 MongoDB 服务:执行命令:
mongod --config "D:\MongoDB\configure.cfg" --install
- 启动 MongoDB:
net start mongodb
- 关闭 MongoDB:
net stop mongodb
- 移除 MongoDB:
"D:\MongoDB\bin\mongod.exe" --remove
MongoDB 概念
SQL | MongoDB | 描述 |
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table | joins | 表连接/MongoDB 不支持 |
primary key | primary key | 主键/MongoDB 自动将 _id 字段设置为主键 |
MongoDB 元素
主要包括 database,collection,document:
- document:相当于关系型数据库中的一行。document 是一个对象,由键值对构成,类似于字典,是 json 的扩展形式:
{“name”:"zhangsan","num":"100"}
- collection:相当于关系型数据库中的表。能够存储多个文档,结构可以不固定
{“name”:"zhangsan","num":"100"}
{“name”:"lisi","age":"20"}
{“name”:"wangwu","sex":"x"}
MongoDB 指令
指令 | 描述 |
db | 查看当前数据库 |
show dbs | 查看所有数据库 |
use databasename | 切换数据库,如果数据库不存在,则进行创建(创建完成后需要插入数据才算做创建成功) |
db.dropDatabase() | 删除当前指向的数据库 |
db.collectionname.insert(value) | 添加数据到指定 collection |
db.collectionname.find() | 从指定 collection 中查找数据 |
pymongo
连接 MongoDB
import pymongo
# 连接 MongoDB 服务,事先需要启动 MongoDB 服务
mongo = pymongo.MongoClient('127.0.0.1',port=27017)
print(type(mongo))
# 获得 test 数据库,没有则创建
db = mongo.test
# 获得 sheet1 collection
collection = db.sheet1
# 插入数据
collection.insert_one({"username":"zhangsan","num":"100"})
结果为:
<class 'pymongo.mongo_client.MongoClient'>
通过上边的数据,可以将输入插入到 test 数据库中的 sheet1 collection 中,最后的结果可以在终端或者 Compass 中查看。
数据类型
类型 | 描述 |
ObjectID | 文档 ID |
String | 字符串(有效的 utf-8) |
Boolean | 布尔值 |
Integer | 整数型 |
Double | 浮点型 |
Arrays | 数据或列表,多个值存储到一个键 |
Object | 嵌入式文档,此时的一个值就是一个文档 |
Null | Null |
Timestamp | 时间戳,表示从 1997/1/1 至今的总秒数 |
Date | 存储当前日期或时间的 UNIX 时间格式 |
常用函数
insert_one
加入一条 document 到 collection 中。
insert_many
加入多条 document 到 collection 中。
find_one
查找一条 document。
find
查找所有 document。
update_one
更新一条 document。
updata_many
更新多条 document。
delete_one
删除一条 document。
delete_many
删除多条 document。
import pymongo
mongo = pymongo.MongoClient('127.0.0.1',port=27017)
db = mongo.test
collection = db.sheet1
result = collection.find()
for item in result:
print(item)
print('********************************')
collection.insert_one({"username":"zhangsan","num":"100"})
print(collection.find_one({"num":"100"}))
print('********************************')
collection.insert_many(
[
{"username": "lisi", "num": "101"},
{"username":"wangwu","num":"102"},
{"username":"zhaoliu","num":"103"}
])
result = collection.find()
for item in result:
print(item)
print('********************************')
collection.update_many({"username":"zhangsan"},{"$set":{"username":"zhangjie"}})
result = collection.find()
for item in result:
print(item)
print('********************************')
collection.delete_many({"username": "zhangjie"})
result = collection.find()
for item in result:
print(item)
结果为:
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangsan', 'num': '100'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangsan', 'num': '100'}
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangjie', 'num': '100'}
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}