我已成功安装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
。我不知道为什么我怎样才能解决这个问题?
最佳答案
mongocxx::collection
对象的生存期必须是创建它的mongocxx::client
对象的生存期的子集。通过在构造函数中获取mongocxx::client
对象,然后在该类的成员变量(可能是a)中获取并存储mongocxx::collection
对象,然后允许销毁mongocxx::client
对象,已经违反了该约束。 mongocxx::collection
中loadData
对象的后续使用无效。
关于c++ - Mongocxx连接错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44636363/