bsoncxx - есть ли способ перебирать документы в файле дампа .bson? - PullRequest
1 голос
/ 13 мая 2019

Аналогично тому, как мы создаем объекты bsoncxx :: document :: view из буфера с одним двоичным документом, есть ли способ извлечь отдельные документы из коллекции в дампе .bson в этой среде, не загружая их вБД?

т.е. что работает для отдельных объектов документа

uint8 *buffer; // single bson document
size_t length; // size of buffer
bsoncxx::document::view view(buffer, length);

for (auto elem : view) {
doSomethingWithElem()
}

Я бы хотел иметь возможность создать курсор для всего дампа, но без загрузки его в коллекцию.Возможно ли что-то подобное?

1 Ответ

2 голосов
/ 14 мая 2019

Нашел решение, и в итоге все было довольно просто - я использовал библиотеку libbson.Пример того, что я использовал ниже:

#include <bson.h>
// and other includes

void read_bson() {

    bson_reader_t *reader;
    const bson_t *doc;
    bson_error_t error;
    bool eof;
    char *path;

    reader = bson_reader_new_from_file(path, &error);

if (reader)
        {
            while ((doc = bson_reader_read(reader, &eof)))
            {
                  const uint8_t *buffer = bson_get_data(doc);
                  auto view = bsoncxx::document::view(buffer, doc->len);
             }
         }
}
...