MongoDB学习笔记GridFS
有点懒,所以告诉自己一定要坚持!
- Markdown和扩展Markdown简洁的语法
进入bin目录,在地址栏输入cmd,回车,输入如下:
C:\Program Files\MongoDB\Server\3.4\bin>mongofiles -d sg put D:\test.txt
-d——指定数据库sg
将D盘的test.txt文件存储到GridFS文件系统中
此时,在shell中:
use sg
show collections
将会看到结果中多出两个集合,“fs.chunks”和“fs.files”。
可通过如下命令分别查看
db.fs.files.find()
db.fs.chunks.find()
其中,files中存放的是文件的元数据即文件的信息,chunks存放文件数据,一个chunk的上限是255kB,若文件大小大于255kB,则会被切分成多个chunk,这些chunk将被保存到fs.chunks中,而文件信息则被存到fs.files。
db.fs.chunks.find()
{ “_id” : ObjectId(“5a09968fb009081f30046234”), “files_id” : ObjectId(“5a09968fb009081f30046233“), “n” : 0, “data” : BinData(0,”c2drag==”) }
db.fs.files.find()
{ “_id” : ObjectId(“5a09968fb009081f30046233“), “chunkSize” : 261120, “uploadDate” : ISODate(“2017-11-13T12:56:48.078Z”), “length” : 4, “md5” : “2ddb514d94f02a918eb37cd3cd627bd7”, “filename” : “D:\test.txt” }
故而在查找时,可以通过条件定位到fs.files的“_id”,通过该标志查找 chunks中所有“files_id" 与”_id“相等的chunk,并且按照fs.chunks的键“n”的值进行排序,即可还原文件。
当我们想下载上传到GridFS文件系统中的文件时,可以在bin目录下cmd中:
C:\Program Files\MongoDB\Server\3.4\bin>mongofiles -d sg get D:\test.txt -l D:\test\sg1.txt
-l——指定新文件名
get 后的文件名要与之前put时的文件名一致,由于fs.files中的”filename”保存的就是当时put后的带路径的文件名,你可以指定新的存放位置和文件名,但经笔者实测新指定的文件名若不在根路径下,其路径中涉及的文件夹必须存在,否则会报错,如笔者例子中的-l指定的时D盘test文件夹,则在执行该get语句前需要手动创建test文件夹,再执行,之前的test.txt文件就会被下载到D:\test文件夹下,并且文件名时sg1.txt。