javascript - 使用 gridfs-stream 执行 find() 时如何指定 GridFS 存储桶

标签 javascript mongodb gridfs bucket gridfs-stream

使用gridfs-stream,查找和获取文件时如何指定bucket名称?

我的问题是在 stackoverflow 上发现的以下问题的后续问题 How can I specify a GridFS bucket

那里的解决方案提供了一个示例,说明如何在调用 createWriteStream 时指定存储桶。根据 @vsivsi 提供的代码,我可以使用以下代码中的“root”选项将文件添加到我的自定义存储桶:

// fyi, req.file has been populated using multer
var gfs = Grid(mongoose.connection.db);
var writeStream = gfs.createWriteStream({
    filename: req.file.originalname,
    mode: 'w',
    content_type: req.file.mimetype,
    root: 'private'
});

这成功地将我的文件添加到 private.files 和 private.chunks 中。 所以现在我想查找并阅读我上传的文件。我的 find() 不使用存储桶,如下所示:

var gfs = Grid(mongoose.connection.db);
gfs.find({
    filename: req.params.filename
}).toArray(function(err, files){ 
     // bunch of processing here... 
});

现在我如何知道要查询哪个存储桶/根?

我假设当我调用 createReadStream() 时我将能够使用相同的“root”选项,但首先我需要找到它。有没有办法告诉 gridfs-stream 使用哪个存储桶/根?

最佳答案

我想我找到了自己的答案。查看gridfs-write的源码,我发现了以下原型(prototype):

Grid.prototype.collection = function (name) {
  this.curCol = name || this.curCol || this.mongo.GridStore.DEFAULT_ROOT_COLLECTION;
  return this._col = this.db.collection(this.curCol + ".files");
}

所以我现在可以使用以下命令搜索我的存储桶:

var gfs = Grid(mongoose.connection.db);
gfs.collection('private').find({
  filename: req.params.filename
}).toArray(function(err, files){
    // handle err and no files...
    let readStream = gfs.createReadStream({
        filename: files[0].filename,
        root: 'private'
    });
    // ... etc. ...
});

希望这可以帮助其他可能来寻找它的人!

关于javascript - 使用 gridfs-stream 执行 find() 时如何指定 GridFS 存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47423295/

相关文章:

mongodb - KMongo 查询从 Mongo Shell 产生不同的结果

mongoDB 作为 Grails 应用程序的文件存储

javascript - Twitter Bootstrap 的 Tab 插件中的 "data-api"是什么意思

javascript - Jquery UI.Multiselect 无法正常工作

javascript - 如何实现AngularJS异步?

mongodb - Mongo::OperationFailure,数据库命令 'filemd5' 失败:(errmsg:'异常:已请求最佳猜测计划,但需要扫描和排序)

node.js - 将 multer 与 inmemory 选项一起使用并流式传输到 mongodb gridfs

javascript - 如何在javascript中的函数参数中插入数据?

mongodb - 无法使用monstache使用URL连接到mongodb

mongodb - 在MongoDB中存储数据url