2014-03-12 144 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);