我成功安装了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";
}
}
。
我不知道为什么。我该如何解决这个问题?
答案 0 :(得分:0)
mongocxx::collection
对象的生命周期必须是创建它的mongocxx::client
对象生命周期的子集。您通过在构造函数中获取mongocxx::client
对象,然后在类(可能是一个)成员变量中获取并存储mongocxx::collection
对象,然后允许mongocxx::client
来违反该约束要销毁的对象。 mongocxx::collection
中loadData
对象的后续使用无效。