MongoDB–GridFS
这篇文章主要是介绍在安装MongoDB时候遇到的问题以及介绍如何使用MongoDB存储文件。
MongoDB安装
- 下载链接:MongoDB官网下载链接。安装完成过程中注意安装时候会勾选装一个compass可视化的MongoDB工具,可以先不安装,等安装好MongoDB服务再从官网上下载进行安装。可视化工具安装地址:MongoDB可视化工具官网下载地址。具体安装过程网上很多教程,就不一一阐述了。
- 安装完成MongoDB后可以配置为Windows服务,这样就不用每次需要开启MongoDB服务。安装服务的时候注意要求管理员权限。
MongoDB基本操作
这一部分就不多说了,具体可以参考官网的文档以及一些博客。
MongoDB–GridFs
- MongoDB数据结构
- collections:集合,类似关系型数据库中的表。
- document :MongoDB保存的基本单元,存储格式为BSON格式数据,key-value格式的数据,可保存的数据类型有:null, boolean,string, object,日期,int等数据类型。
- gridfs:保存一些大的文件如音频,图片,视频,文件等。
- MongoDB数据类型
参考MongoDB官网:MongoDB数据类型。MongoDB文档存储是使用BSON类型,BSON(BSON short for Binary JSON, is a binary-encoded serialization of JSON-like documents)是二进制序列化的形式。类如JSON,同样支持内嵌各种类型。
Type | Number | Alias | Notes |
---|---|---|---|
Double | 1 | “double” | |
String | 2 | “string” | |
Object | 3 | “object” | |
Array | 4 | “array” | |
Binary | data 5 | “binData” | |
Undefined | 6 | “undefined” | Deprecated. |
ObjectId | 7 | “objectId” | |
Boolean | 8 | “bool” | |
Date | 9 | “date” | |
Null | 10 | “null” | |
Regular | Expression | 11 | “regex” |
DBPointer | 12 | “dbPointer” | Deprecated. |
JavaScript | 13 | “javascript” | |
Symbol | 14 | “symbol” | Deprecated. |
JavaScript (with scope) | 15 | “javascriptWithScope” | |
32-bit integer | 16 | “int” | |
Timestamp | 17 | “timestamp” | |
64-bit integer | 18 | “long” | |
Decimal128 | 19 | “decimal” | New in version 3.4. |
Min key | -1 | “minKey” | |
Max key | 127 | “maxKey” |
- GridFs的基本使用
GridFs用了两个集合存储一个文件fs.files以及fs.chunks。文件的信息存储在fs.files,包括文件id,文件名,添加时间以及文件MD5码等信息。fs.chunks存储的是文件的内容,里面字段包括_id,file_id,n,data。其中fs.chunks里面file_id与fs.files的文件id相对应,_id表示数据库的唯一标识,n表示数据块的序号。
GridFs命令行操作工具 — mongofiles- Put: 上传文件存在数据库Image中,命名为"Test":mongofiles -d gridfs -l “a.jpg” put “Test” 或者 mongofiles -d gridfs put “a.jpg”
- Get: 从数据库Image下载文件"Test"至"C:\Users\Pictures\a\a.jpg"
mongofiles -d Image -l “C:\Users\Pictures\a\a.jpg” get “Test” - List: 查看文件列表:mongofiles -d Image list
- Search: 查找名为"Test"的文件:mongofiles -d Image search “Test”
- Delete:删除名为"Test"的文件:mongofiles -d Image delete “Test”
其中-d指定数据库实例,-l[–local]:上传/下载时的本地文件名,默认与Image上的文件名一致。
Python操作MongoDB
from pymongo import MongoClient
from grids import *
from datetime import datetime
import os
if __name__ == '__main__':
client = MongoClient('your hmongodb host', 'your mongodb port')
db = client.image #设置存储的db
dirs='***' #your document directory
files = os.listdir(dirs)
gridFS = GridFS(db, collection = "fs")
count = 0
for file in files:
filename = dirs + '\\'+file
filedata = open(filename, 'rb')
putDoc = gridFS.put(filedata, addTime = datetime.now(), filename = file)
filedata.close()
for file in gridFS.find():
data = grid_out.read()
filedata = file.read()
outFile = open(file.fileName, 'wb')
outFile.write(filedata)
outFile.close()