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 の「ceiling」値を 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

これで問題が解決するかどうかはわかりませんが、DB 内のコレクション内の特定のドキュメントを更新したくありませんか? したがって、これらの行に沿って何か:

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 に答える