如何使用C++驱动程序通过对象ID更新MongoDB

How to update MongoDB by Object ID with C++ driver?

本文关键字:对象 ID 更新 MongoDB 何使用 C++ 驱动程序      更新时间:2023-10-16

我想我已经用尽了所有可用的文档。使用Mongo的C++BSON驱动程序,我想从Mongo中找到一条记录,然后根据找到的记录对象id对该记录进行更新。我遇到的主要问题是更新查询。我尝试过的一个不起作用的例子:

db.update("mydb.mycollection",
          QUERY("_id" << ObjectID("521e68e5b9efcf5a9dff7052")),
          BSON("$set" << BSON("somefield" << "11111")));

我找不到任何关于如何使用C++驱动程序从_id字段进行查询或基于_id字段更新的文档,在我的示例中,_id字段是我唯一的唯一字段。任何示例代码都将不胜感激,尤其是运行查找查询、提取对象ID,然后更新特定文档上的字段的代码。

我没有编译驱动程序,但我认为它正在转换为OID

db.update("mydb.mycollection", QUERY("_id" << OID("521e68e5b9efcf5a9dff7052")))

在任何情况下,这里有许多测试案例可能会/不会被证明是有用的,我过去曾使用这些案例来"学习"如何在文档非常差的驱动程序中做一些事情。

尝试此代码:

db.update("tutorial.persons",
       BSON("name" << "Joe" << "age" << 33),
       BSON("$inc" << BSON( "visits" << 1)));

我使用了WiredParie提供的非常有用的答案来弄清真相。。。。下面是一个代码示例,用于1)从现有查询中提取ObjectID("_id")字段(在这种情况下,结果变量称为"tx"),并将其与该查询的更新参数一起传递给更新查询

// Update order based on objectid
db.update("dakota.transaction",
          QUERY("_id" << tx.getField("_id")),
          BSON("$set" << BSON("somefield" << "11111")));

需要注意的是,WiredParie发布的答案在使用OID手动转换字符串时也是正确的-只是缺少mongo将数据更新为新所需的最后一组参数