我已成功安装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::collectionloadData对象的后续使用无效。

关于c++ - Mongocxx连接错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44636363/

10-14 08:13