mongo-cxx-driver无法迭代视图

时间:2019-03-12 11:59:43

标签: mongo-cxx-driver

我有一个带有以下文档的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,并且输出说得到密钥。

我期望打印“ Got key”,因为一个文件从find_one返回。
为什么不显示?

1 个答案:

答案 0 :(得分:1)

您正在查看释放的内存。对.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 ++驱动程序中的生命周期管理需要引起注意。请阅读文档注释以了解您使用的方法,因为它们几乎总是描述您必须遵循的规则。