Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongo cxx驱动程序-新的C&x2B+;11驱动程序-如何从二进制数据创建文档 对于一个项目,我需要一个BSON的C++实现。 根据BSON规范,有一些BSON C++实现。 我已经试过了。 不再支持。 甚至不会在我的debian上编译_C++_Mongodb_C++11 - Fatal编程技术网

mongo cxx驱动程序-新的C&x2B+;11驱动程序-如何从二进制数据创建文档 对于一个项目,我需要一个BSON的C++实现。 根据BSON规范,有一些BSON C++实现。 我已经试过了。 不再支持。 甚至不会在我的debian上编译

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)

所以我尝试了官方的mongodb cxx驱动程序。 但是我想使用驱动程序的当前主分支,它包含新的c++11驱动程序,因为它使用cmake作为构建系统。我已经创建了一个bson文档并将其转换为二进制数组。目前我的问题是,我不知道如何从二进制数据数组中创建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消息中提取字段所需的所有方法。

在进一步挖掘其代码后,我找到了答案:

您可以使用:

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类型的信息。