【问题标题】:How to update MongoDB by Object ID with C++ driver?如何使用 C++ 驱动程序通过对象 ID 更新 MongoDB?
【发布时间】:2013-09-01 05:54:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ mongodb


    【解决方案1】:

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

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

    无论如何,有许多测试用例位于 here,它们可能/没有被证明是有用的,我过去曾用它们来“学习”如何在文档非常糟糕的驱动程序中做一些事情。

    【讨论】:

      【解决方案2】:

      试试这个代码:

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

      【讨论】:

        【解决方案3】:

        我使用了来自 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 将数据更新为新数据所需的最后一组参数

        【讨论】:

        • 完成了,抱歉,表格不好。
        • 我不确定你做了什么?
        猜你喜欢
        • 1970-01-01
        • 2020-09-01
        • 2011-01-28
        • 2019-08-29
        • 1970-01-01
        • 2020-04-08
        • 2021-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多