GridFS是用于存储和检索大型文件(如图像,音频文件,视频文件等)的MongoDB规范。它是一种用于存储文件的文件系统,但其数据存储在MongoDB集合中。 GridFS存储文件可超过文件大小限制为16MB
的功能。
GridFS将文件划分成块,并将每个数据块存储在单独的文档中,每个文件的最大大小为255k
。
默认情况下,GridFS使用两个集合fs.files
和fs.chunks
来存储文件的元数据和块。 每个块由其唯一的ObjectId字段_id
标识。 fs.files
作为父文档进行切换。 fs.chunks
文档中的files_id
字段将该块链接到其父块。
以下是fs.files
集合的示例文档 -
{
"filename": "test.txt",
"chunkSize": NumberInt(261120),
"uploadDate": ISODate("2018-04-13T11:32:33.557Z"),
"md5": "7b762939321e146569b07f72c62cca4f",
"length": NumberInt(646)
}
文档指定文件名,块大小,上传的日期和长度。
以下是fs.chunks
文档的示例文档 -
{
"files_id": ObjectId("595b99d9f6a6243715b3c312"),
"n": NumberInt(0),
"data": "Mongo Binary Data"
}
将文件添加到GridFS
现在,使用put
命令存储一个使用GridFS的mp3文件。 为此,我们将使用MongoDB安装文件夹的bin文件夹中出现的mongofiles.exe
工具程序。
打开命令提示符,导航到MongoDB安装文件夹的bin文件夹中的mongofiles.exe
,然后键入以下代码 -
D:\Program Files\MongoDB\Server\3.4\bin> mongofiles.exe -d gridfs put song.mp3
这里,gridfs
是要存储文件的数据库的名称。 如果数据库不存在,MongoDB将自动创建一个新的文档。 song.mp3
是上传文件的名称。 要在数据库中查看文件的文档,可以使用查询查询 -
> db.fs.files.find()
上述命令返回以下文档 -
{
_id: ObjectId('595b99d9f6a6243715b3c316'),
filename: "song.mp3",
chunkSize: 381120,
uploadDate: new Date(1398391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
length: 10401959
}
还可以使用以前查询中返回的文档ID,查看与存储文件相关的fs.chunks
集合中存在的所有块,并使用以下代码:
>db.fs.chunks.find({files_id:ObjectId('595b99d9f6a6243715b3c316')})
在这个示例中,查询返回50
多个文件,表示整个mp3
文件被分成50
个数据块。