sql >> データベース >  >> NoSQL >> MongoDB

Mlabに保存されているオーディオの取得-バイナリファイル-

    16MB未満のファイルにはGridFSは必要ありません。 BSONのバイナリタイプ を使用して、バイナリデータをMongoDBに直接保存することができます。 または、バイナリデータをエンコードして文字列として保存します。 Base64は、バイナリデータを文字列として保存する場合の一般的なエンコーディングの選択肢です。

    データベースからデータを取得したら、 fs.writeFile

    データをバイナリタイプとして保存した場合は、buffer を渡すことができます。 fs.writeFileへ 。データをエンコードされた文字列として保存した場合は、文字列とencodingを渡すことができます オプション。

    (Expressでファイルを提供する場合は、コンテンツタイプを設定し、 res.send

    これがNodeJSの小さな例です。これにより、ディスクからオーディオファイルが読み取られ、バイナリタイプとしてMongoDBデータベースに保存されます(MongoDBドライバーのバイナリ クラス)、データベースから取得し、ディスク上の新しいファイルに書き込みます。

    const mongodb = require('mongodb')
    const util = require('util')
    const fs = require('fs')
    const readFile = util.promisify(fs.readFile)
    const writeFile = util.promisify(fs.writeFile)
    
    async function main() {
      const client = await mongodb.MongoClient.connect(process.env.MONGO_URI)
      console.log('connected')
    
      let db = await client.db('dbname')
    
      // Reading in binary data from a file. data is a buffer.
      let data = await readFile(__dirname + '/sample.mp3')
    
      // Insert binary data to the database
      let res = await db.collection('coll').insert({data: new mongodb.Binary(data)})
      console.log(res)
      let objectId = res.ops[0]._id
    
      // Retrieve binary data from the database
      let obj = await db.collection('coll').findOne({_id: objectId})
      console.log(obj)
    
      // *** This is the key part ***
      // use obj.data.read to get a buffer from the binary data and write that buffer to a file
      await writeFile(__dirname + '/out.mp3', obj.data.read(0, obj.data.length()))
    
      console.log('done')
    }
    
    main()
    

    バイナリデータはデータベースに保存されますが、ファイルシステムまたはオブジェクトストレージ(Amazon S3など)にファイルを保存するのがおそらく最も一般的です。次に、そのファイルへのリンクをデータベースに保存し、そのリンクを使用してそのファイルを取得します。自分がより快適に感じる方なら何でもできます。




    1. SQLでグループの最小値を持つ行を選択する5つの方法

    2. 埋め込み配列内の埋め込みドキュメントのプロジェクトフィールド

    3. mongoDBへの動的xml

    4. spring-data-redis1.7.0.M1を使用するときにredis-clusterを設定する方法