mongo cxx驱动程序-新的C&x2B+;11驱动程序-如何从二进制数据创建文档 对于一个项目,我需要一个BSON的C++实现。 根据BSON规范,有一些BSON C++实现。 我已经试过了。 不再支持。 甚至不会在我的debian上编译
所以我尝试了官方的mongodb cxx驱动程序。 但是我想使用驱动程序的当前主分支,它包含新的c++11驱动程序,因为它使用cmake作为构建系统。我已经创建了一个bson文档并将其转换为二进制数组。目前我的问题是,我不知道如何从二进制数据数组中创建bson文档,即使在对它们的代码进行了两个小时的挖掘之后mongo cxx驱动程序-新的C&x2B+;11驱动程序-如何从二进制数据创建文档 对于一个项目,我需要一个BSON的C++实现。 根据BSON规范,有一些BSON C++实现。 我已经试过了。 不再支持。 甚至不会在我的debian上编译,c++,mongodb,c++11,C++,Mongodb,C++11,所以我尝试了官方的mongodb cxx驱动程序。 但是我想使用驱动程序的当前主分支,它包含新的c++11驱动程序,因为它使用cmake作为构建系统。我已经创建了一个bson文档并将其转换为二进制数组。目前我的问题是,我不知道如何从二进制数据数组中创建bson文档,即使在对它们的代码进行了两个小时的挖掘之后 这项功能目前是否已经实现 在进一步挖掘他们的代码后,我找到了答案: 您可以使用: bsoncxx::document::view(uint8_t* data, size_t length)
这项功能目前是否已经实现 在进一步挖掘他们的代码后,我找到了答案: 您可以使用:
bsoncxx::document::view(uint8_t* data, size_t length)
为了创建新视图
然后你可以用
bsoncxx::builder::core(bool isArray)
创造一个新的核心
.在这个核心上你可以打电话
core.concatenate(view)
将视图插入新核心。
之后,您可以使用以下内容创建新的sub_文档:
bsoncxx::builder::basic:sub_document(core* c)
sub_文档应提供从bson消息中提取字段所需的所有方法。在进一步挖掘其代码后,我找到了答案: 您可以使用:
bsoncxx::document::view(uint8_t* data, size_t length)
为了创建新视图
然后你可以用
bsoncxx::builder::core(bool isArray)
创造一个新的核心
.在这个核心上你可以打电话
core.concatenate(view)
将视图插入新核心。
之后,您可以使用以下内容创建新的sub_文档:
bsoncxx::builder::basic:sub_document(core* c)
sub_文档应提供从bson消息中提取字段所需的所有方法。来自MongoDB的C++11驱动程序提供了几个bson写入接口和一个读取接口 如果要读取一些已序列化的bson,请执行以下操作:
bsoncxx::document::view view(data, length); // make a view
view["key"]; // fetch a key
view.find("key"); // map style iterator
for (auto x : view) {} // C++11 for loop
// or to load an array
bsoncxx::array::view view(data, length);
view[N];
// etc...
如果您想写一些bson:
对于流式api:
using namespace bsoncxx::builder::stream;
// Use builder::stream::array for array building
document b;
// Makes { "key" : "value", "subdoc" : { "sub key a" : 1 } }
b << "key" << "value" << "subdoc" <<
<< open_document << "sub key a" << 1 << close_document;
// to concatenate
b << concatenate(view);
// to use a non-deducible type like a sub doc
b << "key" << bsoncxx::types::b_document{view}
b.view() // gets a view
// take ownership of the bson bytes in a move only value type
bsoncxx::document::value v = b.extract()
您找到的核心api当然是功能性的,但它旨在为BSON提供一个底层机器,通过重新分配缓冲区进行附加,而不是一个易于使用的客户端接口。如果您希望使用一些模板魔法使构造更具声明性,请选择builder::basic或builder::stream API。MongoDB的C++11驱动程序提供了一些用于BSON编写的接口和一个用于读取的接口 如果要读取一些已序列化的bson,请执行以下操作:
bsoncxx::document::view view(data, length); // make a view
view["key"]; // fetch a key
view.find("key"); // map style iterator
for (auto x : view) {} // C++11 for loop
// or to load an array
bsoncxx::array::view view(data, length);
view[N];
// etc...
如果您想写一些bson:
对于流式api:
using namespace bsoncxx::builder::stream;
// Use builder::stream::array for array building
document b;
// Makes { "key" : "value", "subdoc" : { "sub key a" : 1 } }
b << "key" << "value" << "subdoc" <<
<< open_document << "sub key a" << 1 << close_document;
// to concatenate
b << concatenate(view);
// to use a non-deducible type like a sub doc
b << "key" << bsoncxx::types::b_document{view}
b.view() // gets a view
// take ownership of the bson bytes in a move only value type
bsoncxx::document::value v = b.extract()
您找到的核心api当然是功能性的,但它旨在为BSON提供一个底层机器,通过重新分配缓冲区进行附加,而不是一个易于使用的客户端接口。如果您希望使用一些模板魔术使构造更具声明性,请选择builder::basic或builder::stream API。谢谢您的回答。昨天我也找到了你提到的解决方案。我认为这是最好的方法。现在有更多关于C++11驱动程序中提供的各种BSON类型的信息。谢谢你的回答。昨天我也找到了你提到的解决方案。我认为这是最好的方法。现在有更多关于C++11驱动程序中提供的各种BSON类型的信息。