2017-06-19 103 views
1

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

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"; 
    }  
} 

那么,它给了错误:src/mongoc/mongoc-topology-scanner.c:754 mongoc_topology_scanner_get_error(): precondition failed: ts

我不知道为什么。我怎样才能解决这个问题?

+0

你是如何从一个功能到另一个功能的,它是你的班级的成员? – pm100

+0

是的,'coll'是班级的私人成员 – GAVD

回答

0

mongocxx::collection对象的生命周期必须是创建它的mongocxx::client对象的生命周期的子集。您通过在构造函数中获取mongocxx::client对象,然后获取mongocxx::collection对象并将其存储在该类的成员变量(大概是该成员变量)中,然后允许该对象被销毁,从而违反了该约束。后续使用mongocxx::collection对象的loadData无效。