Équivalent $set de MongoDb dans son pilote java

Existe-t-il un moyen de modifier la valeur de L'une des clés de MongoDb via son pilote Java. J'ai essayé ce qui suit:

someCollection.update(DBObject query, DBObject update);
someCollection.findAndModify(DBObject query, DBObject update);

Mais les deux fonctions remplacent complètement le document interrogé par le document mis à jour. Quel est le moyen de mettre à jour une seule de la valeur d'une clé particulière comme dans le cas de l'utilisation de $set dans le shell mongo.(en dehors de faire un Document complètement nouveau avec tous les champs copiés et l'un des champs mis à jour).

25
demandé sur aditya_gaur 2011-02-09 13:15:12

5 réponses

Je ne suis pas expert en java, mais il semble que le code suivant corresponde à vos besoins:

BasicDBObject set = new BasicDBObject("$set", new BasicDBObject("age", 10));
set.append("$set", new BasicDBObject("name", "Some Name");
someCollection.update(someSearchQuery, set);

Aussi regarder cet exemple.

18
répondu Andrew Orsich 2011-02-09 10:33:24
BasicDBObject carrier = new BasicDBObject();
BasicDBObject query = new BasicDBObject();
query.put("YOUR_QUERY_STRING", YOUR_QUERY_VALUE);

BasicDBObject set = new BasicDBObject("$set", carrier);
carrier.put("a", 6);
carrier.put("b", "wx1");        
myColl.updateMany(query, set);

Cela devrait fonctionner, la réponse qui est acceptée n'est pas juste au-dessus.

29
répondu Yekmer Simsek 2015-05-18 15:53:55

La réponse précédente m'a indiqué dans la bonne direction, mais le code pour ajouter un 2ème objet à la mise à jour n'a pas fonctionné pour moi. Ce qui suit a fait:

BasicDBObject newValues = new BasicDBObject("age", 10);
newValues.append("name", "Some Name");
BasicDBObject set = new BasicDBObject("$set", newValues);
collection.update(someSearchQuery, set);
1
répondu John 2011-10-12 15:52:01

Aucune des solutions mentionnées ci-dessus n'a fonctionné pour moi. J'ai réalisé que la requête devrait être un type de Document et non un BasicDBObject:

Document set = new Document("$set", new Document("firstName","newValue"));

yourMongoCollection.updateOne(new Document("_id",objectId), set);

Où "yourMongoCollection" est de type "MongoCollection" et "objectId" de type "ObjectId"

0
répondu magicsign 2016-12-12 15:48:34

Tout d'abord, à moins que je ne veuille reconfigurer/reformater / "re-taper" mes valeurs, Je n'irais qu'avec findAndModify et Pas update.

Voici un exemple entièrement fonctionnel à des fins de c&p... Profitez:

    Boolean updateValue(DB db, DBCollection collection, String id, String key, Object newValue)
    {
        DBCollection collection = db.getCollection(<collection name>);

        // Identify your required document (id, key, etc...)
        DBObject     query      = new BasicDBObject("_ID",<ID or key value>);
        DBObject     update     = new BasicDBObject("$set", new BasicDBObject(key, newValue));

        //These flags will guarantee that you'lls get the updated result
        DBObject     result     = collection.findAndModify(query, null, null, false, update,true, true);

        //Just for precaution....
        if(result == null)
            return false;

        return result.get(key).equals(newValue);
    }
0
répondu JamesC 2017-10-13 11:31:28