MongoDB--GridFS

MongoDB–GridFS

這篇文章主要是介紹在安裝MongoDB時候遇到的問題以及介紹如何使用MongoDB存儲文件。

MongoDB安裝

  1. 下載鏈接:MongoDB官網下載鏈接。安裝完成過程中注意安裝時候會勾選裝一個compass可視化的MongoDB工具,可以先不安裝,等安裝好MongoDB服務再從官網上下載進行安裝。可視化工具安裝地址:MongoDB可視化工具官網下載地址。具體安裝過程網上很多教程,就不一一闡述了。
  2. 安裝完成MongoDB後可以配置爲Windows服務,這樣就不用每次需要開啓MongoDB服務。安裝服務的時候注意要求管理員權限。

MongoDB基本操作

這一部分就不多說了,具體可以參考官網的文檔以及一些博客。

MongoDB–GridFs

  • MongoDB數據結構
  1. collections:集合,類似關係型數據庫中的表。
  2. document :MongoDB保存的基本單元,存儲格式爲BSON格式數據,key-value格式的數據,可保存的數據類型有:null, boolean,string, object,日期,int等數據類型。
  3. gridfs:保存一些大的文件如音頻,圖片,視頻,文件等。
  • MongoDB數據類型
    參考MongoDB官網:MongoDB數據類型。MongoDB文檔存儲是使用BSON類型,BSON(BSON short for Bin­ary JSON, is a bin­ary-en­coded seri­al­iz­a­tion of JSON-like doc­u­ments)是二進制序列化的形式。類如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
    1. Put: 上傳文件存在數據庫Image中,命名爲"Test":mongofiles -d gridfs -l “a.jpg” put “Test” 或者 mongofiles -d gridfs put “a.jpg”
    2. Get: 從數據庫Image下載文件"Test"至"C:\Users\Pictures\a\a.jpg"
      mongofiles -d Image -l “C:\Users\Pictures\a\a.jpg” get “Test”
    3. List: 查看文件列表:mongofiles -d Image list
    4. Search: 查找名爲"Test"的文件:mongofiles -d Image search “Test”
    5. 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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章