java - 如何更新 MongoDB 中特定文档的数组内特定嵌入文档的值?

标签 java mongodb mongodb-java

我的文档中有以下结构:

{
  _id : ObjectId("43jh4j343j4j"), 
  array : [
            { 
              _arrayId : ObjectId("dsd87dsa9d87s9d7"),
              someField : "something",
              someField2 : "something2"
            },
            { 
              _arrayId : ObjectId("sds9a0d9da0d9sa0"),
              someField : "somethingElse",
              someField2 : "somethingElse2"
            }
   ]
 }

我想更新 someFieldsomeField2 但仅针对数组中的一项,即与 _arrayId 匹配的一项(例如 _arrayId : ObjectId("dsd87dsa9d87s9d7"); 并且仅适用于本文档(例如 _id : ObjectId("43jh4j343j4j") ),没有其他。

arrayIds 不是文档独有的,这就是为什么我需要它用于特定文档的原因。如果我想为数组中存在的每个文档更新该值,我可以使用 $ 位置运算符,但这不是我想要的。

我正在尝试在 中完成此任务但是命令行解决方案也可以。

最佳答案

这是 RameshVel 的解决方案,翻译为 :

    DB db = conn.getDB( "yourDB" ); 
    DBCollection coll = db.getCollection( "yourCollection" );

    ObjectId _id = new ObjectId("4e71b07ff391f2b283be2f95");
    ObjectId arrayId = new ObjectId("4e639a918dca838d4575979c");

    BasicDBObject query = new BasicDBObject();
    query.put("_id", _id);
    query.put("array._arrayId", arrayId);

    BasicDBObject data = new BasicDBObject();
    data.put("array.$.someField", "updated");

    BasicDBObject command = new BasicDBObject();
    command.put("$set", data);

    coll.update(query, command);

关于java - 如何更新 MongoDB 中特定文档的数组内特定嵌入文档的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7425993/

相关文章:

Mongodb 聚合、分组和计数实例

javascript - router.delete 返回空数组

mongodb - 如何用 Java 从 MongoDB 检索单个字段

mongodb - 如何部分更新 MongoDB 中的对象,以便新对象与现有对象重叠/合并

mongodb - 如何在 Mongo Java 驱动程序 2.13.0 中使用给定的用户名和密码对任何数据库进行身份验证?

java - 控制台中的时间刷新

java - 从四个点绘制填充形状

java - 是否有可能获得超过 100 条推文?

java - Selenium 中的 sendKeys 函数出现无法聚焦元素错误

python - pymongo - 序列化/pickle 连接或数据库对象