varios update una registros registro modificar masivo insertar documentos documento crear coleccion actualizar java mongodb mongo-java

java - una - update en mongodb



$ push y $ set en la misma actualizaciĆ³n de MongoDB (1)

No conozco el controlador de Java, pero ¿tienes que crear una lista allí? ¿Qué pasa si intentas este código?

BasicDBObject update = new BasicDBObject().append("$push", new BasicDBObject().append("values", dboVital)); update = update.append("$set", new BasicDBObject().append("endTime", time)); collection.update( new BasicDBObject().append("_id", pageId), update, true, false);

Esto debería producir el equivalente de

db.collection.update({_id: pageId}, {$push: {values: dboVital}, $set: {endTime: time}});

Mientras que tu código produce (sospecho) esto:

db.collection.update({_id: pageId}, [{$push: {values: dboVital}}, {$set: {endTime: time}}]);

Estoy intentando usar el controlador Java de MongoDB para realizar dos actualizaciones ($ set y $ push) en un registro en la misma operación. Estoy usando un código similar al siguiente:

BasicDBObject pushUpdate = new BasicDBObject().append("$push", new BasicDBObject().append("values", dboVital)); BasicDBObject setUpdate = new BasicDBObject().append("$set", new BasicDBObject().append("endTime", time)); BasicDBList combinedUpdate = new BasicDBList(); combinedUpdate.add( pushUpdate); combinedUpdate.add( setUpdate); collection.update( new BasicDBObject().append("_id", pageId), combinedUpdate, true, false);

Cuando combino $ set y $ push en la misma actualización a través de BasicDBList, obtengo una IllegalArgumentException: "los campos almacenados en la base de datos no pueden comenzar con ''$'' (Clave incorrecta: ''$ push'')".

Si hago dos actualizaciones separadas, tanto pushUpdate como setUpdate producen resultados válidos.

¡Gracias!