sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Consultando MongoDB GridFS?

GridFS funciona almacenando una cantidad de fragmentos para cada archivo. De esta forma, puede entregar y almacenar archivos muy grandes sin tener que almacenar todo el archivo en la RAM. Además, esto le permite almacenar archivos que son más grandes que el tamaño máximo del documento. El tamaño de fragmento recomendado es de 256 kb.

El campo de metadatos del archivo se puede usar para almacenar metadatos adicionales específicos del archivo, lo que puede ser más eficiente que almacenar los metadatos en un documento separado. Esto depende en gran medida de sus requisitos exactos, pero el campo de metadatos, en general, ofrece mucha flexibilidad. Tenga en cuenta que algunos de los metadatos más obvios ya forman parte de los fs.files documento, por defecto:

> db.fs.files.findOne();
{
    "_id" : ObjectId("4f9d4172b2ceac15506445e1"),
    "filename" : "2e117dc7f5ba434c90be29c767426c29",
    "length" : 486912,
    "chunkSize" : 262144,
    "uploadDate" : ISODate("2011-10-18T09:05:54.851Z"),
    "md5" : "4f31970165766913fdece5417f7fa4a8",
    "contentType" : "application/pdf"
}

Para leer realmente el archivo de GridFS, deberá obtener el documento del archivo de fs.files y los fragmentos de fs.chunks . La forma más eficiente de hacerlo es transmitir esto al cliente fragmento por fragmento, para que no tenga que cargar todo el archivo en la RAM. Los chunks colección tiene la siguiente estructura:

> db.fs.chunks.findOne({}, {"data" :0});
{
    "_id" : ObjectId("4e9d4172b2ceac15506445e1"),
    "files_id" : ObjectId("4f9d4172b2ceac15506445e1"),
    "n" : 0, // this is the 0th chunk of the file
    "data" : /* loads of data */
}

Si desea utilizar los metadata campo de fs.files para sus consultas, asegúrese de comprender la notación de puntos, por ejemplo,

> db.fs.files.find({"metadata.OwnerId": new ObjectId("..."), 
                    "metadata.ImageWidth" : 280});

también asegúrese de que sus consultas puedan usar un índice usando explain() .