mongo-cxx-driver 无法迭代视图
mongo-cxx-driver can not iterate view
我有一个 mongodb 集合,其中包含以下文档:
{
"_id" : ObjectId("5c879a2f277d8132d6707792"),
"a" : "133",
"b" : "daisy",
"c" : "abc"
}
当我运行下面的mongocxx代码时:
auto r = client["DB"]["Collection"].find_one({}).value().view();
isREmpty = r.empty();
rLength = r.length();
isOneInR = r.begin() == r.end();
for (bsoncxx::document::element ele : r) {
std::cout << "Got key" << std::endl;
}
我得到 isREmpty = false, rLength = 99, isOneInR = true 和 no 输出说 Got key.
我期待 "Got key" 的打印,因为一份文档从 find_one 返回。
为什么不显示?
您正在查看释放的内存。对 .value()
的调用会创建一个临时 bsoncxx::value
对象。然后,您可以使用 .view()
查看该临时对象并尝试检查数据,但为时已晚。
您要做的是捕获 find_one
:
返回的光标
auto cursor = client["DB"]["Collection"].find_one({});
请参阅示例以了解更多详细信息,但这是一个简单的示例:https://github.com/mongodb/mongo-cxx-driver/blob/master/examples/mongocxx/query.cpp#L43
需要注意 C++ 驱动程序中的生命周期管理。请阅读您使用的方法的文档注释,因为它们几乎总是描述您必须遵循的规则。
我有一个 mongodb 集合,其中包含以下文档:
{
"_id" : ObjectId("5c879a2f277d8132d6707792"),
"a" : "133",
"b" : "daisy",
"c" : "abc"
}
当我运行下面的mongocxx代码时:
auto r = client["DB"]["Collection"].find_one({}).value().view();
isREmpty = r.empty();
rLength = r.length();
isOneInR = r.begin() == r.end();
for (bsoncxx::document::element ele : r) {
std::cout << "Got key" << std::endl;
}
我得到 isREmpty = false, rLength = 99, isOneInR = true 和 no 输出说 Got key.
我期待 "Got key" 的打印,因为一份文档从 find_one 返回。
为什么不显示?
您正在查看释放的内存。对 .value()
的调用会创建一个临时 bsoncxx::value
对象。然后,您可以使用 .view()
查看该临时对象并尝试检查数据,但为时已晚。
您要做的是捕获 find_one
:
auto cursor = client["DB"]["Collection"].find_one({});
请参阅示例以了解更多详细信息,但这是一个简单的示例:https://github.com/mongodb/mongo-cxx-driver/blob/master/examples/mongocxx/query.cpp#L43
需要注意 C++ 驱动程序中的生命周期管理。请阅读您使用的方法的文档注释,因为它们几乎总是描述您必须遵循的规则。