web-dev-qa-db-ja.com

MongoDBにファイルを保存するにはどうすればよいですか?

ユーザーが選択したファイルをMongoDBに保存したい。 MongoDBに追加するためにBSONオブジェクトにファイルを正しく追加するにはどうすればよいですか?私のアプローチが間違っている場合は、正しい方向を指し示してください。

以下はクライアントコードです。このjQuery関数は、すべての入力フィールドのテキスト(ファイルパーツに関するヘルプが必要)を収集し、BSONオブジェクトとしてサーバーに送信します。

$('#add').click(function()
            {
                console.log('Creating JSON object...');
                var classCode = $('#classCode').val();
                var professor = $('#professor').val();
                var description = $('#description').val();
                var file = $('#file').val();

                var document = 
                {
                    'classCode':classCode,
                    'professor':professor,
                    'description':description,
                    'file':file,
                    'dateUploaded':new Date(),
                    'rating':0 
                };
                console.log('Adding document.');
                socket.emit('addDocument', document);
            });

フォームのHTML:

   <form>
        <input type = 'text' placeholder = 'Class code' id = 'classCode'/>
        <input type = 'text' placeholder = 'Document description' id = 'description'/>
        <input type = 'text' placeholder = 'Professor' id = 'professor'/>
        <input type = 'file' id = 'file'/>
        <input type = 'submit' id = 'add'/>
    </form>

CoffeeScriptのサーバー側コード:

#Uploads a document to the server. documentData is sent via javascript from submit.html
            socket.on 'addDocument', (documentData) ->
                console.log 'Adding document: ' + documentData
                db.collection 'documents', (err, collection) ->
                    collection.insert documentData, safe:false
                    return
21
user810606

MongoDBにファイルを保存するには、 GridFS を使用する必要があります
GridFSの操作に関するチュートリアルを見つけることができます( )。
MongoDBドライバーのAPIを確認し、プロジェクトに実装してみてください

15
Sergey Gavruk

ファイルが十分に小さい(16メガバイト未満)の​​場合、GridFSの複雑さを追加する代わりに、BSONドキュメントにファイルを埋め込むことができます。

BSONにはバイナリデータ型があり、任意のドライバがアクセスを提供する必要があります。

ファイルがテキストファイルの場合、UTF8文字列として保存できます。

36
paulmelnikow

GridFSを使用する場合

公式ドキュメントから: https://docs.mongodb.com/manual/core/gridfs/#when-to-use-gridfs

MongoDBでは、16 MBを超えるファイルを保存するためにGridFSを使用します。

状況によっては、システムレベルのファイルシステムよりもMongoDBデータベースで大きなファイルを保存する方が効率的です。

  • ファイルシステムがディレクトリ内のファイル数を制限している場合、GridFSを使用して必要な数のファイルを保存できます。

  • ファイル全体をメモリにロードせずに大きなファイルの一部から情報にアクセスする場合、GridFSを使用して、ファイル全体をメモリに読み込まずにファイルのセクションを呼び出すことができます。

  • ファイルとメタデータを多数のシステムと施設にわたって自動的に同期および展開したい場合は、GridFSを使用できます。地理的に分散したレプリカセットを使用する場合、MongoDBはファイルとそのメタデータをいくつかのmongodインスタンスと施設に自動的に配信できます。

ファイル全体のコンテンツをアトミックに更新する必要がある場合は、GridFSを使用しないでください。別の方法として、各ファイルの複数のバージョンを保存し、メタデータでファイルの現在のバージョンを指定できます。ファイルの新しいバージョンをアップロードした後、アトミックアップデートで「最新」ステータスを示すメタデータフィールドを更新し、必要に応じて以前のバージョンを後で削除できます。

さらに、ファイルがすべて16 MB BSONのドキュメントサイズ制限よりも小さい場合は、GridFSを使用する代わりに、単一のドキュメント内にファイルを手動で保存することを検討してください。 BinDataデータ型を使用して、バイナリデータを保存できます。 BinDataの使用の詳細については、ドライバーのドキュメントを参照してください。

3
Rémi Becheras