MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Извличане на аудио - двоичен файл - съхранен в моя Mlab

Не се нуждаете от GridFS за файлове, по-малки от 16 MB. Можете или да съхранявате двоични данни директно в MongoDB, като използвате двоичния тип на BSON или кодирайте вашите двоични данни и ги съхранявайте като низ. Base64 е често срещан избор на кодиране при съхраняване на двоични данни като низове.

След като извлечете данните от базата данни, можете да ги запишете във файл с помощта на fs.writeFile .

Ако сте запазили данните си като двоичен тип, можете да подадете буфер към fs.writeFile . Ако сте запазили данните си като кодиран низ, можете да предадете низ и encoding опция.

(Ако искате да обслужвате файла с Express, можете да зададете типа съдържание и да изпратите данните чрез res.send )

Ето малък пример в NodeJS. Това чете аудио файл от диска, записва го в база данни 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:вмъкнете документи със специфичен идентификатор вместо автоматично генериран ObjectID

  2. Mongodb - неизвестен оператор от най-високо ниво:$elemMatch

  3. Какви са основните команди на MongoDB и как да ги използвам?

  4. проблем с mongorestore:Не може да възстанови потребители със схема версия 1 към система със сървър версия 2.5.4 или по-нова

  5. Агрегиране на MongoDb за филтриране на списък въз основа на идентификатори, присъстващи в обект на масив от всички документи от същата колекция