2016-03-02 83 views
0

我工作在一个web应用程序开发与MEAN堆栈,我需要存储文件在mongoDB没有调用GridFs,因为这稍后有弱文件,我做了很多研究,但我总是找到GridFS。存储文件在mongoDB withour GridFS

+0

您可以将GridFS用于小文件的大文件和其他内容(直接嵌入到文档中?)。 – Thilo

回答

1

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

+0

小心!请确保您的文档总大小不超过16MB限制。这是MongoDB的硬限制,以防万一。 – Saleem

+0

@Saleem当然,但是OP似乎意识到了这个限制,他/她因为*弱点而丢弃了GridFS *。 – Shanoor

+0

我同意。具有不同经验的人访问堆栈溢出来寻找解决方案,并且经常在没有意识到权衡的情况下误读。但是,你有一个更好的解决方案,更好的解释,所以竖起大拇指! – Saleem