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