gpt4 book ai didi

c++ - mongo-cxx-driver - 新的 C++11 驱动程序 - 如何从二进制数据创建文档

转载 作者:行者123 更新时间:2023-11-30 01:47:35 32 4
gpt4 key购买 nike

对于一个项目,我需要 bson 的 C++ 实现。根据 BSON 规范,有几个 bson c++ 实现。我已经试过了每一个。 Bson-cpp不再支持。 Bson-cxx甚至不会在我的 debian stretch 上编译。

所以我尝试了官方的mongodb-cxx-driver。但我想使用包含新 c++11 驱动程序的驱动程序的当前主分支,因为它使用 cmake 作为构建系统。我已经设法创建了一个 bson 文档并将其转换为二进制数组。我目前的问题是,即使在挖掘他们的代码两个小时后,我也不知道如何从二进制数据数组创建 bson 文档。

目前是否实现了此功能?

最佳答案

MongoDB 的 C++11 驱动程序提供了几个用于 BSON 写入的接口(interface)和一个用于读取的接口(interface)。

如果你想做的是读取一些已经序列化的 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:

using namespace bsoncxx::builder::basic;

// Use builder::basic::array for array building
document b;

b.append(
kvp("key", "value"),
// Use sub_array for sub arrays
kvp("subdoc", [](sub_document sd) {
sd.append(kvp("sub key a", 1));
})
);

您找到的那个核心 api 肯定是有功能的,但它的目的是为 BSON 在重新分配的缓冲区上追加提供一个低级机器,而不是一个易于使用的客户端界面。如果您想要一些模板魔术来使构造更具声明性,请首选 builder::basic 或 builder::stream api。

关于c++ - mongo-cxx-driver - 新的 C++11 驱动程序 - 如何从二进制数据创建文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31432098/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com