2012-01-30 12 views
21

Estoy tratando de usar el controlador Java de MongoDB para hacer dos actualizaciones ($ set y $ push) a 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 el set y $ $ empuje en la misma actualización a través de un BasicDBList, consigo una IllegalArgumentException: "campos almacenados en el PP no pueden comenzar con '$' (Clave incorrecta: '$ push') ".

Si realizo dos actualizaciones por separado, tanto pushUpdate como setUpdate producen resultados válidos.

Gracias!

Respuesta

40

No conozco el controlador de Java, pero ¿tiene que crear una lista allí? ¿Qué pasa si prueba 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 el código produce (sospecho) esto:

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

eso es todo! ¡Muchas gracias! – HolySamosa

Cuestiones relacionadas