MongoDB使用_id查找
MongoDB finding using an _id
我正在使用最新版本的新C++Mongodb驱动程序/库(不是遗留版本、26compat或C版本)以及Qt框架(Linux上最新的64b)。在同一个程序中,我成功地读写了数据库,一切都很好。
我意识到这个版本不稳定,但我不想要提升依赖性,这是一个新项目,只有我在做。
我不是一个专业的程序员,所以请原谅任何知识空白。
在我的数据库中,我有一个支持集合,它只记得用户处理的最后一个项目,我想做的是使用存储在该文档中的值作为带字段名的字符串,在程序启动时加载该项目。
我想使用存储在m_Current_Project_key变量中的密钥从项目集合加载项目数据。
在find语句后第一行下面的代码中,使用同一集合中不同的硬编码字段名和数据进行搜索,只是为了证明代码更通用。
我遇到的问题是让程序搜索一个特定的"_id",我可以从mongo命令行中正确地看到它在集合和文档中。
下面代码行末尾的注释显示了我尝试过的不同方法的输出。
它位于一个方法中,该方法从同一数据库中读取不同的集合,并从中获取一个值,该值放入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);
当我使用上面的标题行时,光标只指向一个值,没有接下来的两行——我得到的值是我想要的文档,但在实际情况下,程序唯一知道的是"_id"。项目名称可能不唯一。
我曾尝试将std::字符串转换为OID,但没有将其识别为类型。
我在谷歌上做了很多搜索和尝试,我不敢相信没有一种直接的方法可以根据文档的"_id"找到文档。在示例中,唯一查找到的示例使用"_id"以外的值。
db.project.find({ "_id" : ObjectId("553b976484e4b5167e39b6f1")}, { title : 1 })
在Mongo命令行上执行我想要的操作。
如果我能得到任何帮助,我将不胜感激,我已经花了很多时间尝试。
谢谢。
这里的问题是您使用了错误的bsoncxx::oid
构造函数。当从ObjectId的十六进制表示形式的std::string
(例如"553b976484e4b5167e39b6f1"
)创建oid
时,应使用采用stdx::string_view
的单参数构造函数。
正确的代码如下:
using bsoncxx::stdx::string_view;
auto cursor = db["project"].find(document{}
<< "_id"
<< bsoncxx::oid{stdx::string_view{m_Current_Project_key.toStdString()}}
<< finalize
);
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 一种有效的数据结构,用于按 ID 访问和查找加权随机项
- 按名称查找进程 ID 的快速方法
- 查找称为函数C 的线程ID
- 我想看到一个在整个后缀表达式的上下文中查找转换类型 id 的示例
- 在/dev/input/event*中动态查找鼠标事件id
- 在C++标准中定义了对非限定 *mem-initializer-id* 的查找
- 如何在 NS2 中查找节点 ID
- 如何查找 CoreWindow 的所有指针 ID
- 在具有父 ID 的一般树中查找最低共同祖先
- boost:如何按名称查找进程的进程 ID
- 什么时候在构造函数的类定义中通过普通查找找不到 mem-initializer-id?
- 如何使用文件的ID在一组目录中查找文件
- 在限定的声明符-id之后查找名称
- 模板 ID 中的好友查找异常
- C++从线程 ID 列表中查找 GUI 线程
- C ++挂钩到不同的应用程序,如何从进程ID中查找线程ID