MongoDB permite definir la carga de datos binarios (por ejemplo archivos jpg, png, pdf etc.) en un campo de un documentos, siempre y cuando no supere el límite de 16Mb definido por el gestor de base de datos por motivos de eficiencia. Si tenemos que almacenar archivos muy grandes como podrían ser un archivo mp4 con una película debemos utilizar otra técnica, como por ejemplo que en el campo del documento se almacene la URL donde se encuentra la película.
Desde el shell de Mongo estamos bastante limitados para la carga de un campo de tipo binario pero podemos hacerlo creando una variable y almacenando el valor retornado por BinData:
use base1 db.usuarios.drop() var datobinario=BinData(0,'e8MEnzZoFyMmD7WSHdNrFJyEk8M=') db.usuarios.insertOne( { nombre:'marcos', clave:'abc123', fotoperfil:datobinario } ) db.usuarios.find().pretty()
La ejecución del bloque anterior nos almacena un documento con un campo con formato 'Binary Data':
Recordemos que en el mundo real cuando almacenemos campos de tipo Binary Data lo haremos desde una aplicación creada con alguno de los tantos lenguajes que soporta MongoDB como pueden ser: C, C++, C#, Go, Java, Node.js, Perl, PHP, Phyton, Ruby o Scala.
Las ventajas de tener los datos binarios dentro de los documentos son:
Proporciona el motor de base de datos alta disponibilidad y replicación de datos.
Una arquitectura de aplicación más simple al tener centralizado todos los datos.
Cuando se usan conjuntos de réplicas distribuidas geográficamente, MongoDB distribuirá automáticamente los datos a centros de datos geográficamente distintos.
El almacenamiento de datos en la base de datos aprovecha los mecanismos de autenticación y seguridad de MongoDB.
Mejor rendimiento en los accesos a datos. Accediendo al documento contamos con todos los datos y no tenemos que hacer referencias a otras locaciones con datos.
Hay que tener en cuenta que un documento puede crecer solo hasta 16Mb, en el caso de ser archivos binarios con tamaños superiores hay que utilizar otra técnica para su almacenamiento, lo más común es almacenarlos la referencia mediante una URL.
Hay otra técnica de trocear el archivo y almacenarlo en una sucesión de documentos, puede consultar en la página oficial de MongoDB.