16 Oct 2010 ebf   » (Master)

Notas sobre GridFS e MongoDB

Durante o dia de hoje efetuamos vários testes com o GridFS do MongoDB. E, por mais simples que seja, achar documentação e exemplos desse monstro em C++ foi bem complicado.

Depois de escovar bits, analisar headers e analisar o código fonte do driver C++ do MongoDB, chegamos a um exemplo simples de armazenamento de arquivos genéricos no GridFS, alterando o Metadata do arquivo em questão. Esse é o exemplo que deu certo – se tiver alguma sugestão, comment! :)

Aproveitem!

...
#include "mongo/client/dbclient.h"
#include "mongo/client/gridfs.h"

using namespace mongo;

...
// pega o caminho completo do arquivo a ser salvo
m_NomeArquivo = ...;
QFileInfo   info(m_NomeArquivo);

...
DBClientConnection  c;
// conexão com o MongoDB, local.
c.connect("localhost");

// Mapeamos o GridFS com o prefixo que queremos
GridFS      gfs     = GridFS(c, "gridfs", "arquivos");
BSONObj  retorno    = gfs.storeFile(m_NomeArquivo.toStdString(), info.fileName().toStdString());
BSONObjBuilder  b;
b.appendElements(retorno);
// Aqui incluímos qualquer informação que quisermos
b.append("arquivoInserido", "0001");
BSONObj o   = b.obj();

// E atualizamos o registro do metadata no MongoDB
c.update("gridfs.arquivos.files", BSON("filename" << retorno.getField("filename")), o, false, false);

Latest blog entries     Older blog entries

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!