1

我需要帮助来更新 MONGO DB。这是我的文件:

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 } } }

我正在尝试在 MongoDB 中将 shop-app 的“上限”值从 70 更新到 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);

有人可以帮我做错什么吗?

4

2 回答 2

1

您不能真正使用该点表示法创建 DBObject。您必须为文档树中的每个级别嵌套新的 BasicDBObject。

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

或者,您可以使用Helper 类将 json 字符串转换为这样的 DBObject 结构。

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

但请注意,使用 JSON 类可能会导致性能问题。手动构建 DBObjects 更快。

于 2013-04-27T07:28:20.663 回答
0

不确定这是否能解决您的问题,但您不想更新数据库中集合中的特定文档吗?所以沿着这些思路:

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

我也会以这种方式定义 find ,因为您需要该集合中的特定对象。

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

让我知道这个是否奏效。

于 2013-04-27T06:01:42.510 回答