Mongocxx连接错误

时间:2017-06-19 17:15:44

标签: c++ mongo-cxx-driver

我成功安装了mongocxx驱动程序。现在我尝试编写一个类来连接和查询数据库中的数据。如果我在这样的构造函数中编写查询

select [Date], ID, DC, OC, sum(ElapsedTime), sum(Units), sum(UPH)
  from (SELECT EventDate AS 'Date'
               ,ID
               ,DeptCode 'DC'
               ,OpCode 'OC'
               [...]
       ) subquery
 group by [Date], ID, DC, OC;

它就像一个魅力。

但是,如果我分开两个这样的函数

DBConnection::DBConnection()
{
    mongocxx::instance instance{};
    mongocxx::uri uri("mongodb://localhost:27017");
    mongocxx::client client(mongocxx::uri{});
    coll = client["testdb"]["testcollection"];
    auto curs = coll.find(bsoncxx::builder::stream::document{} << finalize);
    for (auto doc: curs) {
        std::cout << bsoncxx::to_json(doc) << "\n";
    }
}

然后,它给出了错误:DBConnection::DBConnection() { mongocxx::instance instance{}; mongocxx::uri uri("mongodb://localhost:27017"); mongocxx::client client(mongocxx::uri{}); coll = client["testdb"]["testcollection"]; } void DBConnection::loadData() { mongocxx::cursor cursor = coll.find({}); for (auto doc: cursor) { std::cout << bsoncxx::to_json(doc) << "\n"; } }

我不知道为什么。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

mongocxx::collection对象的生命周期必须是创建它的mongocxx::client对象生命周期的子集。您通过在构造函数中获取mongocxx::client对象,然后在类(可能是一个)成员变量中获取并存储mongocxx::collection对象,然后允许mongocxx::client来违反该约束要销毁的对象。 mongocxx::collectionloadData对象的后续使用无效。