2017-11-21 8 views
0

gridfs-streamを使用して、ファイルを検索してフェッチするときのバケット名の指定方法を教えてください。gridfs-streamを使ってfind()を実行するときにGridFSバケットを指定するにはどうすればいいですか?

私の質問が解決How can I specify a GridFS bucket

でstackoverflowの上にある、次の質問へのフォローアップでは、私がcreateWriteStreamを呼び出すときにバケットを指定する方法の例を提供します。 @vsivsiによって提供されるコードに基づいて、私は次のコードで「ルート」オプションを使用して、私のカスタムバケットにファイルを追加することができる午前:

// 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に伝える方法はありますか?

答えて

0

私は自分の答えを見つけたと思います。 gridfs書き込み用のソースを見ると、私は次のプロトタイプが見つかりました:

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. ... 
}); 

希望これが探して来るかもしれない他の誰かを助けますそれ!

関連する問題