2013-06-26 9 views
13

Wie kann ich Daten in mongodb Sammlung mit Java-Treiber hochladen?Wie man mit mongodb-java-Treiber updaten kann

Ich versuche (mit leerer Sammlung):

db.getCollection(collection).update(new BasicDBObject("_id", "12"), dbobject, true, false); 

Aber Dokument wurde mit _id erstellt == ObjectID (...). Nicht mit "12" Wert.

Dieser Code (js) Dokument mit _id = "12" als

erwartet
db.metaclass.update(
    { _id:12}, 
    { 
    $set: {b:1} 
    }, 
    { upsert: true } 
) 

Mongo-java-Treiber-2.11.2

+0

Jongo Verwendung: http://stackoverflow.com/q/41103427/435605 Jede –

Antwort

14

Sie nicht _id wenn dbobject ist nur ein Dokument festlegen und enthält keinen Aktualisierungsoperator zB: $set, $setOnInsert.

vorbei

einfach ein Dokument wird das gesamte Dokument ersetzen bedeutet, dass es keine _id nicht gesetzt ein zu ObjectId fällt zurück

So Ihr Beispiel funktioniert, wenn Sie ein Update Operator zB verwenden:

db.getCollection(collection).update(
    new BasicDBObject("_id", "12"), 
    new BasicDBObject("$set", new BasicDBObject("Hi", "world")), true, false) 
12

Wenn Sie mongo-java driver 3 verwenden, funktioniert die Methode .updateOne mit {upsert, true} Flag.

void setLastIndex(MongoClient mongo, Long id, Long lastIndexValue) { 

    Bson filter = Filters.eq("_id", id) 

    Bson update = new Document("$set", 
        new Document() 
         .append("lastIndex", lastIndexValue) 
         .append("created", new Date())) 
    UpdateOptions options = new UpdateOptions().upsert(true) 

    mongo.getDatabase(EventStreamApp.EVENTS_DB) 
     .getCollection(EventCursor.name) 
     .updateOne(filter, update, options) 
    } 
+0

Beispiel dafür, wie werden Sie setzen verwenden $ und $ setOnInsert in der gleichen Update-Abfrage. – vivek85