2

我成功安装了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

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

4

1 回答 1

1

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

于 2017-06-22T01:38:33.807 回答