Como atualizo campos de documentos no mongo db usando o driver java?
Referências:
http://www.mongodb.org/display/DOCS/Java+TutorialAinda bem novo no mongo db, mas estou tentando atualizar parte de um documento existente dentro de uma coleção ... infelizmente, o link acima não possui um exemplo de atualização.
Essencialmente, eu só quero ser capaz de:
Adicionar novos campos a um documentoAtualizar campos existentes de um documento para um novo valorAqui está o meu código (Grails + Groovy + Java + MongoDB + o driver 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"));
Isso praticamente derruba todo o objeto ... Eu posso tentar apenas modificar o objeto de forma original e executar a atualização. Mas até então,alguém tem experiência em atualizar apenas campos individuais (em vez de todo o documento)?
EDITAR:
Eu apenas tentei e consegui atualizar com êxito enviando o objeto inteiro com campos novos e / ou atualizados e que funciona. Gostaria de saber se o driver é inteligente o suficiente para atualizar apenas o menor subconjunto de alterações ou se está apenas atualizando cegamente a coisa toda? (No caso abaixo, está apenas atualizando o campo foo através do fio ou todo o 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