使用_id的MongoDB查找 我使用最新版本的C++ MunGDB驱动程序/库(不是遗留的,26Cubor或C版本)以及QT框架(Linux上最新的64 B)。在同一个程序中,我成功地读写了数据库,一切正常
我意识到这个版本是不稳定的,但我不想要boost依赖项,它是一个新项目,只有我在工作 我不是一个专业的程序员,所以请原谅我的知识差距 在我的数据库中,我有一个支持集合,它只记得用户正在处理的最后一个项目,我想做的是使用该文档中存储的值作为带有字段名的字符串,在程序启动时加载该项目 我想使用m_Current_Project_key变量中存储的键从项目集合加载项目数据 在find语句后第一行下面的代码中,使用同一集合中不同的硬编码字段名和数据执行搜索,只是为了证明代码更通用 我遇到的问题是让程序搜索我可以在mongo命令行的集合和文档中正确看到的特定“_id” 下面代码行末尾的注释显示了我尝试过的不同方法的输出 它位于一个方法中,该方法从同一数据库读取不同的集合并从中获取一个值,该值放入m_Current_Project_key变量中,该变量是一个QString使用_id的MongoDB查找 我使用最新版本的C++ MunGDB驱动程序/库(不是遗留的,26Cubor或C版本)以及QT框架(Linux上最新的64 B)。在同一个程序中,我成功地读写了数据库,一切正常,c++,mongodb,qt,C++,Mongodb,Qt,我意识到这个版本是不稳定的,但我不想要boost依赖项,它是一个新项目,只有我在工作 我不是一个专业的程序员,所以请原谅我的知识差距 在我的数据库中,我有一个支持集合,它只记得用户正在处理的最后一个项目,我想做的是使用该文档中存储的值作为带有字段名的字符串,在程序启动时加载该项目 我想使用m_Current_Project_key变量中存储的键从项目集合加载项目数据 在find语句后第一行下面的代码中,使用同一集合中不同的硬编码字段名和数据执行搜索,只是为了证明代码更通用 我遇到的问题是让程序搜
qDebug() << m_Current_Project_key; // "553b976484e4b5167e39b6f1"
qDebug() << Utility::format_key(m_Current_Project_key); // "ObjectId("553b976484e4b5167e39b6f1")" - this utility function just modifies the value passed to it to look like the output
QString test = Utility::format_key(m_Current_Project_key);
test.remove('\"');
qDebug() << test; // "ObjectId(553b976484e4b5167e39b6f1)"
char const *c = m_Current_Project_key.toStdString().c_str();
qDebug() << c; // 553b976484e4b5167e39b6f1
bsoncxx::oid hhh(c, 12);
qDebug() << hhh.get_time_t(); // 892679010
auto cursor = db["project"].find(document{}
// << "title" << "Testing Project"
<< "_id"
<< c
// << hhh
// << m_Current_Project_key.toStdString()
// << m_Current_Project_key.toStdString().c_str()
// << Utility::format_key(m_Current_Project_key).toStdString()
// << test.toStdString()
<< finalize);
在Mongo命令行上执行我想要的操作
如果能得到任何帮助,我将不胜感激,我已经花了很多时间尝试
谢谢。这里的问题是您使用了错误的
bsoncxx::oid
构造函数。从ObjectId的十六进制表示形式的std::string
创建oid
(例如“553b976484e4b5167e39b6f1”
)时,应使用采用stdx::string\u视图的单参数构造函数
正确的代码如下所示:
using bsoncxx::stdx::string_view;
auto cursor = db["project"].find(document{}
<< "_id"
<< bsoncxx::oid{stdx::string_view{m_Current_Project_key.toStdString()}}
<< finalize
);
使用bsoncxx::stdx::string\u视图;
自动游标=db[“项目”]。查找(文档{}
这里的问题是您使用了错误的bsoncxx::oid
构造函数。当从ObjectId的十六进制表示形式的std::string
创建oid
时(例如“553b976484e4b5167e39b6f1”
),您应该使用采用stdx::string\u视图的单参数构造函数
正确的代码如下所示:
using bsoncxx::stdx::string_view;
auto cursor = db["project"].find(document{}
<< "_id"
<< bsoncxx::oid{stdx::string_view{m_Current_Project_key.toStdString()}}
<< finalize
);
使用bsoncxx::stdx::string\u视图;
自动游标=db[“项目”]。查找(文档{}
您的问题有点难理解。您试图理解如何通过id进行查找的摘要是否正确?是的,这就是问题所在,我可以看到如何使用旧版本进行查找,但不能使用新版本。感谢您的关注。您的问题有点难理解。您试图理解的摘要是否正确按id查找?是的,这就是问题所在,我可以看到如何使用旧版本进行查找,但不能使用新版本。感谢您的关注。我已经尝试过了,但收到了错误消息,表明不允许使用“namespace”bsonxxis::stdx,并且未在此范围中声明“stdx”。我想这意味着我缺少头文件或其他内容ng.我已经尝试了我认为最有可能的方法(大多数bsoncxx方法),但无法消除错误。您能建议正确的头文件吗?在搜索时,我找到了boost文件的建议,我认为这不适用于这些新版本的驱动程序。感谢您的帮助,我尝试使用string_视图,但无法使其工作,因此它具有正确的命名空间t help-非常感谢您的帮助。我已经尝试过了,并且收到了错误消息,提示不允许使用“namespace”bsonxxis::stdx,并且没有在此范围内声明“stdx”。我想这意味着我缺少头文件或其他内容。我已经尝试了我认为最有可能的方法(大多数BSonxxx方法),但无法消除错误。您能建议正确的头文件吗?在搜索时,我找到了boost文件的建议,我认为这不适用于这些新版本的驱动程序。感谢您的帮助,我尝试使用string_视图,但无法使其工作,因此它具有正确的命名空间t帮助-感谢你的帮助。