2013-06-26 5 views
13

Как я могу обновить данные в коллекции mongodb с помощью java-драйвера?Как обновить с помощью mongodb-java-драйвера

Стараюсь (с пустой коллекции):

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

Но документ был создан с _id == ObjectID (...). Не со значением «12».

Этот код (JS) добавить документ с _ID = "12", как и ожидалось

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

Монго-ява-водитель-2.11.2

+0

Использование Джонго: http://stackoverflow.com/q/41103427/435605 –

ответ

14

Вы не можете установить _iddbobject, если только документ и не содержит оператора, например: $set, $setOnInsert.

Просто пропускание документа заменит весь документ означает, что он не устанавливает _id водопада назад ObjectId

Так что ваш пример работает, если вы используете оператор обновления, например:

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

Если вы используете mongo-java driver 3, следующие .updateOne метод с {upsert, true} флаг работает.

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

Любой пример того, как вы будете использовать $ установить и $ setOnInsert в том же запросе обновления. – vivek85