【发布时间】:2016-03-02 11:24:06
【问题描述】:
我在使用 MEAN 堆栈开发的 Web 应用程序上工作,我需要在不调用 GridFs 的情况下将文件存储在 mongoDB 中,因为这以后文件很少,我进行了很多研究,但我总是找到 GridFS。
【问题讨论】:
-
您可以只对大文件使用 GridFS,对小文件使用其他东西(直接嵌入到文档中?)。
标签: node.js mongodb filesystems gridfs
我在使用 MEAN 堆栈开发的 Web 应用程序上工作,我需要在不调用 GridFs 的情况下将文件存储在 mongoDB 中,因为这以后文件很少,我进行了很多研究,但我总是找到 GridFS。
【问题讨论】:
标签: node.js mongodb filesystems gridfs
MongoDB 有一个Binary type。它非常易于使用:
var fs = require('fs');
var mongo = require('mongodb');
var MongoClient = mongo.MongoClient;
var Binary = mongo.Binary;
// Connection url
var url = 'mongodb://localhost:27017/test';
// Connect using MongoClient
MongoClient.connect(url).then(function (db) {
var collection = db.collection('bins');
return collection.insert({
name: 'image2',
// the constructor takes a Buffer
bin: new Binary(fs.readFileSync(__dirname + '/img.jpg'))
}).then(function () {
console.log('inserted');
db.close();
}).catch(function (err) {
console.log(err);
});
});
检索存储的文件:
MongoClient.connect(url).then(function (db) {
var collection = db.collection('bins');
return collection.findOne({ name: 'image2' }).then(function (doc) {
console.log(doc);
fs.writeFileSync(__dirname + '/out.jpg', doc.bin.buffer);
db.close();
})
});
二进制类型的使用可以是隐式的。这也会创建一个二进制字段:
collection.insert({
name: 'image2',
bin: fs.readFileSync(__dirname + '/img.jpg')
})
请记住,MongoDB 文档有一个16MB total size limit。
【讨论】: