Wie aktualisiere ich Dokumentfelder in Mongo DB mit dem Java-Treiber?

Verweise

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

Noch ziemlich neu für Mongo DB, aber ich versuche, einen Teil eines vorhandenen Dokuments in einer Sammlung zu aktualisieren ... Leider enthält der obige Link kein Aktualisierungsbeispiel.

rundsätzlich möchte ich nur in der Lage sein:

Neue Felder zu einem Dokument hinzufügen Aktualisieren Sie vorhandene Felder eines Dokuments auf einen neuen Wert

Hier ist mein Code (Grails + Groovy + Java + MongoDB + der Java-Treiber):

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"));

Dies verstopft so ziemlich das gesamte Objekt ... Ich könnte versuchen, nur das ursprüngliche Formobjekt zu ändern und dann das Update darauf auszuführen. Aber bis dann, Hat jemand Erfahrung damit, nur einzelne Felder (und nicht das gesamte Dokument) zu aktualisieren?

BEARBEITEN

Ich habe es gerade ausprobiert und konnte erfolgreich aktualisieren, indem ich das gesamte Objekt mit neuen und / oder aktualisierten Feldern übersandte, und das funktioniert. Ich frage mich, ob der Treiber klug genug ist, nur die kleinste Teilmenge der Änderungen zu aktualisieren, oder ob er nur blind die gesamte Sache aktualisiert. (Im folgenden Fall wird nur das foo-Feld über die Leitung oder das gesamte Formdokument aktualisiert?)

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

Antworten auf die Frage(12)

Ihre Antwort auf die Frage