Mongodb 简明教程

MongoDB - GridFS

GridFS 是 MongoDB 用于存储和检索图像、音频文件、视频文件等大型文件而制定的规范。它是一种用于存储文件的类似文件系统,但其数据储存在 MongoDB 集合内。GridFS 的能力是存储大小甚至超过其 16MB 文档大小限制的文件。

GridFS 将文件分成区块,并将各个数据块存储在一个单独的文件中,每个文件的大小最大为 255k。

GridFS 默认使用两个集合 fs.filesfs.chunks 来存储文件的元数据和区块。每个区块通过其唯一的_id ObjectId字段进行标识。fs.files充当父文档。fs.chunks文档中的 files_id 字段链接区块到其父文档。

以下是一个示例文档fs.files集合 −

{
   "filename": "test.txt",
   "chunkSize": NumberInt(261120),
   "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
   "md5": "7b762939321e146569b07f72c62cca4f",
   "length": NumberInt(646)
}

文档指定文件名、区块大小、上传日期和长度。

以下是一个示例文档fs.chunks文档 −

{
   "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
   "n": NumberInt(0),
   "data": "Mongo Binary Data"
}

Adding Files to GridFS

现在,我们将使用 put 命令通过GridFS存储一个mp3文件。为此,我们将使用MongoDB安装文件夹的bin文件夹中存在的 mongofiles.exe 实用程序。

打开命令提示符,导航到MongoDB安装文件夹的bin文件夹中的mongofiles.exe,然后键入以下代码 −

>mongofiles.exe -d gridfs put song.mp3

这里, gridfs 是存储文件的数据库的名称。如果没有数据库,MongoDB将自动创建新的文档。Song.mp3是上传文件的名称。若要查看文件在数据库中的文档,可以使用find查询 −

>db.fs.files.find()

上述命令返回了以下文档 −

{
   _id: ObjectId('534a811bf8b4aa4d33fdf94d'),
   filename: "song.mp3",
   chunkSize: 261120,
   uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
   length: 10401959
}

我们还可以使用上一个查询返回的文档id,使用以下代码看到与存储文件相关的fs.chunks集合中存在的所有区块 −

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

在我的情况下,查询返回了40个文档,这意味着整个mp3文档被分成了40个数据区块。