Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用_id的MongoDB查找 我使用最新版本的C++ MunGDB驱动程序/库(不是遗留的,26Cubor或C版本)以及QT框架(Linux上最新的64 B)。在同一个程序中,我成功地读写了数据库,一切正常_C++_Mongodb_Qt - Fatal编程技术网

使用_id的MongoDB查找 我使用最新版本的C++ MunGDB驱动程序/库(不是遗留的,26Cubor或C版本)以及QT框架(Linux上最新的64 B)。在同一个程序中,我成功地读写了数据库,一切正常

使用_id的MongoDB查找 我使用最新版本的C++ MunGDB驱动程序/库(不是遗留的,26Cubor或C版本)以及QT框架(Linux上最新的64 B)。在同一个程序中,我成功地读写了数据库,一切正常,c++,mongodb,qt,C++,Mongodb,Qt,我意识到这个版本是不稳定的,但我不想要boost依赖项,它是一个新项目,只有我在工作 我不是一个专业的程序员,所以请原谅我的知识差距 在我的数据库中,我有一个支持集合,它只记得用户正在处理的最后一个项目,我想做的是使用该文档中存储的值作为带有字段名的字符串,在程序启动时加载该项目 我想使用m_Current_Project_key变量中存储的键从项目集合加载项目数据 在find语句后第一行下面的代码中,使用同一集合中不同的硬编码字段名和数据执行搜索,只是为了证明代码更通用 我遇到的问题是让程序搜

我意识到这个版本是不稳定的,但我不想要boost依赖项,它是一个新项目,只有我在工作

我不是一个专业的程序员,所以请原谅我的知识差距

在我的数据库中,我有一个支持集合,它只记得用户正在处理的最后一个项目,我想做的是使用该文档中存储的值作为带有字段名的字符串,在程序启动时加载该项目

我想使用m_Current_Project_key变量中存储的键从项目集合加载项目数据

在find语句后第一行下面的代码中,使用同一集合中不同的硬编码字段名和数据执行搜索,只是为了证明代码更通用

我遇到的问题是让程序搜索我可以在mongo命令行的集合和文档中正确看到的特定“_id”

下面代码行末尾的注释显示了我尝试过的不同方法的输出

它位于一个方法中,该方法从同一数据库读取不同的集合并从中获取一个值,该值放入m_Current_Project_key变量中,该变量是一个QString

    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帮助-感谢你的帮助。