/ / Aggiornamento di Mongodb usando Java - java, mongodb

Aggiornamento di Mongodb usando Java - java, mongodb

Ho bisogno di aiuto per aggiornare il DB di MONGO. ecco il mio documento:

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

Sto cercando di aggiornare il valore del "soffitto" dell'app-negozio da 70 a 100 in MongoDB, ma senza successo. Ecco il mio codice:

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

Qualcuno può aiutarmi per favore cosa sto facendo male?

risposte:

1 per risposta № 1

Non è possibile creare realmente DBObjects con la notazione dei punti: è necessario nidificare nuovi BasicDBObjects per ciascun livello nell'albero del documento.

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

Lo stesso vale per l'oggetto di aggiornamento

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

In alternativa, puoi usare Questo Classe di supporto per la traduzione di stringhe json in strutture DBObject come questa.

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

Ma sappi che l'uso della classe JSON può causare problemi di prestazioni. È semplicemente più veloce creare manualmente DBObjects.


0 per risposta № 2

Non sei sicuro se questo risolverà il tuo problema, ma non vuoi aggiornare un documento specifico all'interno di una collezione all'interno del DB? Quindi qualcosa in questo senso:

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

Definirei anche trovare in questo modo, perché vuoi l'oggetto specifico da quella raccolta.

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

Fammi sapere se funziona.