2015-02-26 2 views
0

Я хочу вставить объект BSON из C++ в middodb gridfs. Я не могу найти полезный документ. о C++ gridfs API. Можете ли вы привести пример вставки или обновления объекта BSON в структуре gridfs в C++. Предположим, что у меня есть коллекция, приведенная ниже;Mongodb GridFs с C++

{ "_id": "123", "данные": [{ "С1": "значение1", "С2": "значение1"}]}

Как я вставить это как gridfs в MongoDB ? P.S .: Я попытался вставить данные в виде коллекций, но я получил ошибку, потому что документ превышает ограничение размера файла. (Документ для вставки превышает maxBsonObjectSize) Например. в вышеприведенном документе массив «data» имеет иногда более 500 000 строк и больше столбцов. Заранее спасибо

ответ

0

У MongoDB C++ driver есть class called GridFS, который позволит вам вставлять документы в вашу сетку. GridFS предназначен для работы с вещами, абстрагируемыми как файлы, он считывает свой ввод как поток байтов, а не как некоторую структурированную вещь, такую ​​как объект BSON. Вы можете конвертировать большие объекты BSON в строки для их хранения:

GridFS grid = new GridFS(*client, "database_name"); 

const char data[] = myLargeBSONObj.toString(); 
BSONObj result = grid->storeFile(data, sizeof data, "filename"); 

Или, вы можете хранить большие объекты в файле и поток их в GridFS вместо:

BSONObj result = grid->storeFile("path/to/file", "filename"); 

GridFS не позволит вам для обновления файла после его вставки в систему. В пределах определенного API нет безопасного пути для обновления, не сталкиваясь с условиями гонки. Чтобы «обновить» файл GridFS, вам нужно будет прочитать его из системы, изменить его в своем приложении и повторно вставить его в GridFS в качестве нового файла. Это медленно и утомительно. Если вам нужно выполнить обновления, я предлагаю вам перепроектировать схему, чтобы ваши документы были меньше 16 МБ.

Смежные вопросы