更改嵌套对象的值 - MongoDB Java

时间:2014-03-12 06:09:41

标签: java mongodb object nested mongodb-query

我正在使用Java驱动程序创建一个MongoDB统计系统,我想知道是否有可能(以及如何)更改嵌套在许多对象中的键的值。以下是我的数据库的格式:

{
  location : “chicago”,
  stats : [
    {
      "employee" : "rob",
      "stat1" : 1,
      "stat2" : 3,
      "stat3" : 2
    },
    {
      "employee" : "krista",
      "stat1" : 1,
      "stat2" : 3,
      "stat3" : 2
    }
  ]
}

那么,例如,我怎么能将Rob的“stat2”改为另一个值?我是JSON和MongoDB Java驱动程序的新手。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

您需要使用positional $运算符和$set来更新所需内容。

db.collection.update(
    { _id: <docId>, "stats.employee": "rob" }, 
    { "$set": { "stats.$.stat2": <value> } }
)

因此,您匹配您的文档和数组所需的元素。更新端使用该数组索引来了解要更新的元素。 $set运算符仅更新指定的字段。

在Java中,使用BasicDBObject构建。

BasicDBObject query = new BasicDBObject("_id", id);
query.append( new BasicDBObject("stats.employee", "rob") );

BasicDBObject update = new BasicDBObject("$set",
    new BasicDBObject("stats.$.stat2", value));

collection.update(query,update);