Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用GridFS在mongoDB中存储文件_Node.js_Mongodb_Filesystems_Gridfs - Fatal编程技术网

Node.js 使用GridFS在mongoDB中存储文件

Node.js 使用GridFS在mongoDB中存储文件,node.js,mongodb,filesystems,gridfs,Node.js,Mongodb,Filesystems,Gridfs,我在使用MEAN stack开发的web应用程序上工作,我需要在mongoDB中存储文件,而不调用GridFs,因为这以后在小文件方面有缺点,我做了很多研究,但我总是发现GridFs。mongoDB有一个。它非常容易使用: var fs = require('fs'); var mongo = require('mongodb'); var MongoClient = mongo.MongoClient; var Binary = mongo.Binary; // Connection ur

我在使用MEAN stack开发的web应用程序上工作,我需要在mongoDB中存储文件,而不调用GridFs,因为这以后在小文件方面有缺点,我做了很多研究,但我总是发现GridFs。

mongoDB有一个。它非常容易使用:

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文档有一个属性。

对于大文件,可以使用GridFS,对于小文件,可以使用其他属性(直接嵌入文档?),注意!确保您的文档总大小不超过16MB限制。这是MongoDB的硬限制,以防万一。@Saleem当然知道,但OP似乎意识到了这个限制,他/她放弃了GridFS,因为文件太少。我同意。具有不同经验的人访问堆栈溢出来寻找解决方案,他们经常在没有实现权衡的情况下误读。然而,你有一个很好的解决方案,有更好的解释,所以竖起大拇指@萨利姆:我加了一张关于限额的便条,以防万一。非常感谢!!对我来说,这是最好的解决方案!