bsoncxx - 有没有办法遍历 .bson 转储文件中的文档?
bsoncxx - is there a way to iterate through documents in .bson dump file?
类似于我们如何使用单个二进制文档从缓冲区构造 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()
}
我希望能够为整个转储构建游标,但不将其加载到集合中。这样的事情可能吗?
找到了解决方案,最终非常简单 - 我使用了 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);
}
}
}
类似于我们如何使用单个二进制文档从缓冲区构造 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()
}
我希望能够为整个转储构建游标,但不将其加载到集合中。这样的事情可能吗?
找到了解决方案,最终非常简单 - 我使用了 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);
}
}
}