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

时间:2013-08-28 23:45:15

标签: c++ mongodb

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

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

我无法找到关于如何使用C ++驱动程序来查询或更新基于_id字段的文档,在我的示例中,这是我唯一的唯一字段。任何示例代码都将非常受欢迎,尤其是运行查询查询的代码,选择objectID,然后更新该特定文档的字段。

3 个答案:

答案 0 :(得分:3)

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

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

在任何情况下,有许多位于here的测试用例可能/不能证明我过去用来“学习”如何在记录很少的驱动程序中做一些事情。

答案 1 :(得分:1)

试用此代码:

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

答案 2 :(得分:0)

我使用了WiredPrarie的非常有用的答案来深入了解....下面是用于1)从现有查询中提取ObjectID(“_ id”)字段的代码示例(在这种情况下)结果变量称为“tx”,并将其与该查询的更新参数一起传递给更新查询。

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

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