2014-03-12 118 views
1

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

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

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

回答

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);