MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consultando o MongoDB GridFS?


O GridFS funciona armazenando vários pedaços para cada arquivo. Dessa forma, você pode entregar e armazenar arquivos muito grandes sem precisar armazenar o arquivo inteiro na RAM. Além disso, isso permite armazenar arquivos maiores que o tamanho máximo do documento. O tamanho de bloco recomendado é 256kb.

O campo de metadados de arquivo pode ser usado para armazenar metadados específicos de arquivo adicionais, que podem ser mais eficientes do que armazenar os metadados em um documento separado. Isso depende muito de seus requisitos exatos, mas o campo de metadados, em geral, oferece muita flexibilidade. Tenha em mente que alguns dos metadados mais óbvios já fazem parte do fs.files documento, por padrão:
> 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 realmente ler o arquivo do GridFS, você terá que buscar o documento do arquivo em fs.files e os pedaços de fs.chunks . A maneira mais eficiente de fazer isso é transmitir isso para o cliente pedaço por pedaço, para que você não precise carregar o arquivo inteiro na RAM. Os chunks coleção tem a seguinte estrutura:
> 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 */
}

Se você quiser usar os metadata campo de fs.files para suas consultas, certifique-se de entender a notação de ponto, por exemplo
> db.fs.files.find({"metadata.OwnerId": new ObjectId("..."), 
                    "metadata.ImageWidth" : 280});

também certifique-se de que suas consultas podem usar um índice usando explain() .