文件存入¶
1.由于MongoDB的文档结构为BJSON格式(BJSON全称:Binary JSON),而BJSON格式本身就支持保存二进制格式的数据,因此可以把文件的二进制格式的数据直接保存到MongoDB的文档结构中。取的时候再以二进制格式取,这样文档就能实现无损保存。
2.数据库支持以BSON格式保存二进制对象。 但是MongoDB中BSON对象最大不能超过4MB。GridFS 规范提供了一种透明的机制,可以将一个大文件分割成为多个较小的文档。原理: GridFS在数据库中,默认使用fs.chunks和fs.files来存储文件。(GridFS不自动处理md5相同的文件)
- fs.files集合存放文件的信息;
- fs.chunks存放文件数据;
进入到MongoDB的安装目录的bin目录中,找到mongofiles.exe,并输入下面的代码:
mongofiles.exe -d gridfs put song.mp3
GridFS 是存储文件的数据名称。如果不存在该数据库,MongoDB会自动创建。Song.mp3 是音频文件名。
使用以下命令来查看数据库中文件的文档:
>db.fs.files.find()
以上命令执行后返回以下文档数据:
{
_id: ObjectId('534a811bf8b4aa4d33fdf94d'),
filename: "song.mp3",
chunkSize: 261120,
uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
length: 10401959
}
我们可以看到 fs.chunks 集合中所有的区块,以下我们得到了文件的 _id 值,我们可以根据这个 _id 获取区块(chunk)的数据:
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
以上实例中,查询返回了 40 个文档的数据,意味着mp3文件被存储在40个区块中。
3. 使用mongoimport 在命令行执行如下:
mongoimport -d test -c students students.dat -d test
指的是导入test 数据库(database)