2016-03-02 109 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

相關問題