2013-06-26 13 views
13

Jak mogę wstawić dane do kolekcji mongodb za pomocą sterownika java?Jak uruchomić z mongodb-java-driver

Staram (z pustą kolekcji):

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

Ale dokument został stworzony z _id == ObjectID (...). Nie z wartością "12".

Ten kod (js) dodać dokument _id = "12" jako oczekiwanego

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

Mongo-java-driver-2.11.2

+0

Korzystanie Jongo: http://stackoverflow.com/q/41103427/435605 –

Odpowiedz

14

Nie można ustawić _id jeśli dbobject jest tylko dokument i nie zawiera operatora aktualizacji, np .: $set, $setOnInsert.

tylko przejazdem dokument zastąpi cały dokument co oznacza, że ​​nie ustawić _id upadków z powrotem do ObjectId

Więc przykład działa jeśli używasz np operatora UPDATE:

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

Jeśli używasz mongo-java driver 3, działa następująca metoda .updateOne z 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

Wszelkie przykładem tego, jak można użyć $ i $ setOnInsert ustawione w tej samej kwerendy aktualizacji. – vivek85