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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章