Comment puis-je mettre à jour des documents de mongo db à l'aide du pilote java?

Références:

Encore assez nouveau pour mongo db, mais je vais essayer de mettre à jour une partie d'un document existant à l'intérieur d'une collection... malheureusement, le lien ci-dessus n'ont pas une mise à jour exemple.

Essentiellement, je veux juste être en mesure de:

  1. Ajouter de nouveaux champs à un document
  2. Mettre à jour les champs d'un document
    une nouvelle valeur

Voici mon code (Grain + Groovy + Java + MongoDB + le pilote 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"));

Ce joli beaucoup clobbers l'ensemble de l'objet... je pourrais essayer seulement la modification de la forme d'origine de l'objet, puis en exécutant la mise à jour sur qui. Mais jusqu'alors, quelqu'un a une expérience de la mise à jour juste champs individuels (plutôt que la totalité du document)?

EDIT:

Je l'ai juste essayé et a réussi à mettre à jour par l'envoi de la totalité de l'objet à travers avec les nouvelles et/ou mis à jour les champs et qui fonctionne. Je me demande si le pilote est assez intelligent pour ne mettre à jour le plus petit sous-ensemble de change ou si c'est juste aveuglément la mise à jour de l'ensemble de la chose? (Dans le cas ci-dessous, c'est juste de la mise à jour de la foo terrain à l'autre bout du fil ou de toute forme de document?)

Code:

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
InformationsquelleAutor longda | 2010-08-27