使用 gridfs-stream 执行 find() 时如何指定 GridFS 存储桶
How can I specify a GridFS bucket when executing find() using gridfs-stream
使用gridfs-stream,查找和抓取文件时如何指定bucket名称?
我的问题是在 How can I specify a GridFS bucket
上的 Whosebug 上发现的以下问题的后续问题
那里的解决方案提供了一个示例,说明如何在调用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...
});
现在我如何告诉 find 要查询哪个 bucket/root?
我假设我在调用 createReadStream() 时能够使用相同的 'root' 选项,但首先我需要找到它。有没有办法告诉 gridfs-stream 使用什么 bucket/root?
我想我找到了自己的答案。查看gridfs-write的源码,发现原型如下:
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. ...
});
希望这对可能前来寻找它的其他人有所帮助!
使用gridfs-stream,查找和抓取文件时如何指定bucket名称?
我的问题是在 How can I specify a GridFS bucket
上的 Whosebug 上发现的以下问题的后续问题那里的解决方案提供了一个示例,说明如何在调用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...
});
现在我如何告诉 find 要查询哪个 bucket/root?
我假设我在调用 createReadStream() 时能够使用相同的 'root' 选项,但首先我需要找到它。有没有办法告诉 gridfs-stream 使用什么 bucket/root?
我想我找到了自己的答案。查看gridfs-write的源码,发现原型如下:
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. ...
});
希望这对可能前来寻找它的其他人有所帮助!