【问题标题】:store files in mongoDB withour GridFS在没有 GridFS 的情况下将文件存储在 mongoDB 中
【发布时间】:2016-03-02 11:24:06
【问题描述】:

我在使用 MEAN 堆栈开发的 Web 应用程序上工作,我需要在不调用 GridFs 的情况下将文件存储在 mongoDB 中,因为这以后文件很少,我进行了很多研究,但我总是找到 GridFS。

【问题讨论】:

  • 您可以只对大文件使用 GridFS,对小文件使用其他东西(直接嵌入到文档中?)。

标签: node.js mongodb filesystems gridfs


【解决方案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

【讨论】:

  • 小心!确保您的文档总大小不超过 16MB 限制。这是 MongoDB 的硬限制,以防万一。
  • @Saleem 当然,但 OP 似乎意识到了这个限制,他/她放弃了 GridFS,因为 文件少的弱点
  • 我同意。具有不同经验的人访问堆栈溢出以寻找解决方案,并且经常在没有意识到权衡的情况下误读。但是,您有一个很好的解决方案,有更好的解释,所以竖起大拇指!
  • @Saleem 我添加了关于限制的注释,以防万一。
  • 非常感谢!!就我而言,这是最好的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2019-05-17
  • 2010-11-11
  • 2014-05-11
  • 2013-10-27
  • 1970-01-01
相关资源
最近更新 更多