Подтвердить что ты не робот

Как обновить с помощью 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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Если вы используете 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)
  }