pom example community java mongodb upsert

example - Como cambiar con mongodb-java-driver



pom mongodb driver (3)

No puede configurar _id si dbobject es solo un documento y no contiene un operador de actualización, por ejemplo: $set , $setOnInsert .

El _id hecho de pasar un documento reemplazará a todo el documento, lo que significa que no establece que _id a recaiga en ObjectId

Así que su ejemplo funciona si usa un operador de actualización, por ejemplo:

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

¿Cómo puedo insertar datos en la colección mongodb con java-driver?

Lo intento (con la colección vacía):

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

Pero el documento fue creado con _id == ObjectID (...). No con el valor "12".

Este código (js) agrega documento con _id = "12" como se esperaba

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

mongo-java-driver-2.11.2


Puede utilizar el método replaceOne y especificar las ReplaceOptions (desde 3.7):

private static final ReplaceOptions REPLACE_OPTIONS = ReplaceOptions.createReplaceOptions(new UpdateOptions().upsert(true)); db.getCollection(collection).replaceOne(new BasicDBObject("_id", "12"), dbobject, REPLACE_OPTIONS);

Para versiones anteriores, puede pasar directamente las UpdateOptions al método replaceOne:

private static final UpdateOptions UPDATE_POLICY = new UpdateOptions().upsert(true); db.getCollection(collection).replaceOne(new BasicDBObject("_id", "12"), dbobject, UPDATE_POLICY);

Como se menciona en la documentation :

replaceOne () reemplaza el primer documento coincidente en la colección que coincide con el filtro, usando el documento de reemplazo.

Si upsert: true y ningún documento coincide con el filtro, replaceOne () crea un nuevo documento basado en el documento de reemplazo.


Si está utilizando el controlador mongo-java 3 , sigue el método .updateOne() con el {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); }