31

nodeJS + mongoDB のバックエンドで実行される Web サイトを実行しています。現在、データベースに必要ないくつかのアイコン (小さな画像ファイル) を保存するシステムを実装しています。

私の理解では、GridFS は大きなファイルまたは多数のファイルに合わせて調整されているように見えるため、使用しない方が理にかなっています。保存する必要があるすべてのファイルは、BSON の最大ファイル サイズを十分に下回るため、通常のドキュメントに直接保存できるはずです。

2 つの質問があります。

1) 私の推論は正しいですか? GridFS とは対照的に、通常の mongo コレクション内に画像ファイルを保存しても問題ありませんか? ここで、私がすべきだと考えていないことはありますか?

2) 私の思考プロセスが正しい場合、どうすればこれを行うことができますか? 次のようなことができますか?

//assume 'things' is a mongoDB collection created properly using node-mongodb-driver

fs.readFile(pathToIconImage, function(err,image){
  things.insert({'image':image}, function(err,doc){
    if(err) console.log('you have an error! ' + err);
  });
});

mongoDB は BSON を使用しており、ここではファイルをデータベースに送信する前に JSON で保存しようとしているため、おそらくこれを行うためのより良い方法があると思います。また、このコードが機能するかどうかもわかりません (試していません)。

更新 - 新しい質問

1) 名前、2) 日付、3) 画像ファイル (上のアイコン) の 3 つの情報が保存されているコレクション内のドキュメントがあり、このドキュメントを順番にクライアントに送信したい場合3つすべてを表示するには、これは可能ですか? そうでない場合は、GridFS を使用して、イメージ自体の代わりに fileID を保存する必要があると思います。考え/提案?

最高です。返信ありがとうございます、
サミ

4

2 に答える 2

37

画像がドキュメント サイズの問題にならないほど十分に小さく、余分な処理が多少発生してもかまわない場合は、コレクションに直接保存しても問題ないでしょう。そのためには、画像を base64 でエンコードしてから、mongo の BinData タイプを使用して保存します。私が理解しているように、実際にはbase64文字列を保存するのではなく、BSONビット配列として保存するため、サイズが元のバイナリイメージより大きくなることはありません。

json クエリで base64 文字列として表示され、バイナリ イメージを取得するために使用できます。

于 2012-07-11T22:50:37.050 に答える