2013-04-27 56 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的速度更快。