remove multi indexes index create compound java mongodb

java - multi - remove index mongodb



MongoDb''s $ set equivalent en su Driver java (5)

Ninguna de las soluciones mencionadas anteriormente funcionó para mí. Me di cuenta de que la consulta debe ser un tipo de documento y no un BasicDBObject:

Document set = new Document("$set", new Document("firstName","newValue")); yourMongoCollection.updateOne(new Document("_id",objectId), set);

Donde "yourMongoCollection" es de tipo "MongoCollection" y "objectId" de tipo "ObjectId"

¿Existe alguna manera de modificar el valor de una de las claves en MongoDb a través de su controlador Java? Probé lo siguiente:

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

Pero ambas funciones reemplazan por completo el documento consultado con el documento actualizado. ¿Cuál es la manera de actualizar solo uno del valor de una clave particular como en el caso de usar $ set en el shell de mongo (aparte de crear un documento completamente nuevo con todos los campos copiados y uno de los campos actualizado).


No soy experto en Java, pero parece que el siguiente código se ajusta a tus necesidades:

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

También mira este ejemplo .


La respuesta anterior me indicó la dirección correcta, pero el código para agregar un segundo objeto a la actualización no funcionó para mí. Lo siguiente hizo:

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


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

Esto debería funcionar, la respuesta que se acepta no está arriba.


Primero, a menos que quiera reconfigurar / reformatear / "volver a escribir" mis valores, iría solo con findAndModify y no update .

Aquí hay un ejemplo completamente funcional para fines c & p ... Disfruta:

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