¿Cómo actualizo los campos de documentos en mongo db usando el controlador java?

Referencias

http://www.mongodb.org/display/DOCS/Java+Tutorial

Todavía es bastante nuevo para mongo db, pero estoy tratando de actualizar parte de un documento existente dentro de una colección ... desafortunadamente, el enlace de arriba no tiene un ejemplo de actualización.

Esencialmente, solo quiero poder:

Agregar nuevos campos a un documentoActualizar campos existentes de un documento a un nuevo valor

Aquí está mi código (Grails + Groovy + Java + MongoDB + el controlador de Java):

def shape = mongo.shapes.findOne(new BasicDBObject("data", "http://www.foo.com")); // get the document
mongo.shapes.update(new BasicDBObject("_id", shape._id), new BasicDBObject("isProcessed", 0));  // add a new "isProcessed" field set to 0
mongo.shapes.update(new BasicDBObject("_id", shape._id), new BasicDBObject("data", "http://www.bar.com"));

Esto prácticamente afecta todo el objeto ... Podría intentar modificar el objeto de forma original y luego ejecutar la actualización. Pero hasta entonces,¿Alguien tiene experiencia actualizando solo campos individuales (en lugar de todo el documento)?

EDITAR:

Acabo de probarlo y pude actualizar con éxito enviando todo el objeto a través de campos nuevos y / o actualizados y eso funciona. Me pregunto si el controlador es lo suficientemente inteligente como para actualizar solo el subconjunto más pequeño de cambios o si solo está actualizando a ciegas todo. (En el siguiente caso, ¿se trata simplemente de actualizar el campo foo a través del cable o de todo el documento de forma?)

Código:

def shape = mongo.shapes.findOne(); // get the first shape to use as a base
shape.removeField("_id");  // remove the id field
shape.put("foo","bar");  // add a new field "foo"
mongo.shapes.insert(shape);  // insert the new shape
def shape2 = mongo.shapes.findOne(new BasicDBObject("foo", "bar"));  // get the newly inserted shape (and more importantly, it's id)
shape2.put("foo", "bat");  // update the "foo" field to a new value
mongo.shapes.update(new BasicDBObject("_id", shape2._id), shape2);  // update the existing document in mongo

Respuestas a la pregunta(6)

Su respuesta a la pregunta