Mongodb 插入到对象内部的集合时,C++ 崩溃
Mongodb c++ crashing when inserting into collection inside an object
我正在使用 mongocxx 驱动程序,我正在尝试对集合进行基本插入。
如果我简单地遵循 here 提供的指导方针,它就可以正常工作。
但是,如果我将数据库和集合实例放入一个对象中,插入会在运行时崩溃。因此,对于一个简单的示例,我有一个包含数据库和集合实例的结构,并且在 main():
中创建 Thing 的实例后尝试通过这些实例进行插入
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/types.hpp>
#include <bsoncxx/json.hpp>
#include <mongocxx/instance.hpp>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/stdx.hpp>
#include <mongocxx/uri.hpp>
struct Thing {
mongocxx::client client;
mongocxx::database db;
mongocxx::collection coll;
void open_connection(const char* host, const char* db_name, const char* coll_name) {
mongocxx::instance inst{};
mongocxx::uri uri(host);
client = mongocxx::client::client(uri);
db = client[db_name];
coll = db[coll_name];
}
};
int main()
{
Thing thing;
thing.open_connection("mongodb://localhost:27017", "test", "insert_test");
auto builder = bsoncxx::builder::stream::document{};
bsoncxx::document::value doc_value = builder << "i" << 1 << bsoncxx::builder::stream::finalize;
auto res = thing.coll.insert_one(doc_value.view()); //crashes
return 0;
}
我意识到这可以通过在 main 中启动数据库和集合并在 Thing 中仅存储指向集合的指针来解决。
然而,我想知道崩溃的原因,以及是否有可能将数据库和集合实例放在一个对象中。
我认为问题可能是 mongocxx::instance inst{};
在 open_connection
中在堆栈上创建,因此在 open_connection
结束时 inst
被销毁,一些数据可能会变成未定义。
Life cycle: A unique instance of the driver MUST be kept around.
将inst
移动到主函数。
我正在使用 mongocxx 驱动程序,我正在尝试对集合进行基本插入。
如果我简单地遵循 here 提供的指导方针,它就可以正常工作。
但是,如果我将数据库和集合实例放入一个对象中,插入会在运行时崩溃。因此,对于一个简单的示例,我有一个包含数据库和集合实例的结构,并且在 main():
中创建 Thing 的实例后尝试通过这些实例进行插入#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/types.hpp>
#include <bsoncxx/json.hpp>
#include <mongocxx/instance.hpp>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/stdx.hpp>
#include <mongocxx/uri.hpp>
struct Thing {
mongocxx::client client;
mongocxx::database db;
mongocxx::collection coll;
void open_connection(const char* host, const char* db_name, const char* coll_name) {
mongocxx::instance inst{};
mongocxx::uri uri(host);
client = mongocxx::client::client(uri);
db = client[db_name];
coll = db[coll_name];
}
};
int main()
{
Thing thing;
thing.open_connection("mongodb://localhost:27017", "test", "insert_test");
auto builder = bsoncxx::builder::stream::document{};
bsoncxx::document::value doc_value = builder << "i" << 1 << bsoncxx::builder::stream::finalize;
auto res = thing.coll.insert_one(doc_value.view()); //crashes
return 0;
}
我意识到这可以通过在 main 中启动数据库和集合并在 Thing 中仅存储指向集合的指针来解决。 然而,我想知道崩溃的原因,以及是否有可能将数据库和集合实例放在一个对象中。
我认为问题可能是 mongocxx::instance inst{};
在 open_connection
中在堆栈上创建,因此在 open_connection
结束时 inst
被销毁,一些数据可能会变成未定义。
Life cycle: A unique instance of the driver MUST be kept around.
将inst
移动到主函数。