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