2013-04-27 73 views
1

我需要更新MONGO DB的幫助。這裏是我的文檔:使用Java進行Mongodb更新

Functions : { 
    "cgi0-app" : { 
     "calculatedConfigValues" : { 
      "floor" : 0.0 , 
      "ceiling" : 49.0 , 
      "calculatedBrokenValue" : 2.033 }, 
     "userConfigValues" : null }, 
    "shop-app" : { 
     "calculatedConfigValues" : { 
      "floor" : 0.0 , 
      "ceiling" : 70.0 , 
      "calculatedBrokenValue" : 2.413 } } } 

我試圖更新商店應用程序內的「天花板」值從70到MongoDB中100,但沒有成功。這裏是我的代碼:

BasicDBObject find = new BasicDBObject("Functions.shop app.calculatedConfigValues.floor",0); 

BasicDBObject set = new BasicDBObject("$set", new BasicDBObject("Functions.shop-  app.calculatedConfigValues.$.ceiling", 100); 

getDB().update(find, set); 

有人可以幫助我,我做錯了什麼?

回答

0

不知道這是否能解決您的問題,但是您不想更新數據庫內某個集合中的特定文檔嗎?所以沿着這些線:

MongoClient mongo = new MongoClient(); 
DB db = mongo.getDB(DB_NAME); 
db.getCollection(COLLECTION_NAME).update(find, set); 

我還將定義查找以這種方式,因爲你想從該集合的特定對象。

BasicDBObject obj = new BasicDBObject(); 
obj.put(..., 0); 
DBObject find = db.getCollection(COLLECTION_NAME).findOne(obj); 

讓我知道這是否工作。

1

你不能用這個點符號真正創建DBObjects。您必須爲文檔樹中的每個級別嵌套新的BasicDBObjects。

DBObject toFind = new BasicDBObject("Functions", 
    new BasicDBObject("show-app", 
     new BasicDBObject("calculatedConfigValues", 
      new BasicDBObject("floor", 0)))); 

同爲更新對象

DBObject update = new BasicDBObject("$set", 
    new BasicDBObject("Functions", 
     new BasicDBObject("show-app", 
      new BasicDBObject("calculatedConfigValues", 
       new BasicDBObject("ceiling", 100))))) 

或者,你可以使用this助手類轉換JSON字符串成DBOBJECT結構是這樣的。

DBObject toFind = (DBObject) JSON.parse(
    "{'Functions.show-app.calculatedConfigValues.floor':0}" 
); 

但請注意,使用JSON類可能會導致性能問題。手動構建DBObjects的速度更快。