Docs Menu
Docs Home
/ /

Insertar o Actualizar en una Operación Única

En esta guía, puede aprender cómo realizar una operación upsert con el controlador Java de MongoDB.

Las aplicaciones utilizan operaciones de inserción y actualización para almacenar y modificar datos. A veces, es necesario elegir entre insertar y actualizar dependiendo de si el documento existe o no. MongoDB simplifica esta decisión con... upsert opción.

An upsert:

  • Actualiza los documentos que coinciden con su filtro de consulta

  • Inserta un documento si no hay coincidencias con su filtro de query.

Para especificar un upsert con los métodos updateOne() o updateMany(), pase true a UpdateOptions.upsert().

Para especificar un upsert con el método replaceOne(), pase true a ReplaceOptions.upsert().

En el siguiente ejemplo, una tienda de pinturas vende ocho colores diferentes. La tienda realizó su venta anual en línea. Su colección paint_inventory ahora muestra los siguientes documentos:

{ "_id": { "$oid": "606b4cfbcd83be7518b958da" }, "color": "red", "qty": 5 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958db" }, "color": "purple", "qty": 8 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dc" }, "color": "blue", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dd" }, "color": "white", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958de" }, "color": "yellow", "qty": 6 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958df" }, "color": "pink", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e0" }, "color": "green", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e1" }, "color": "black", "qty": 8 }

La tienda recibió un nuevo envío y necesita actualizar su inventario. El primer artículo del envío son diez latas de pintura naranja.

Para actualizar el inventario, consulte la colección paint_inventory donde color es "orange", especifique una actualización de increment el campo qty por 10 y especifique true a UpdateOptions.upsert():

// Creates a filter and update document to increment the matching document's "qty" value
Bson filter = Filters.eq("color", "orange");
Bson update = Updates.inc("qty", 10);
// Updates the matching document or inserts a document if none match the query filter
UpdateOptions options = new UpdateOptions().upsert(true);
System.out.println(collection.updateOne(filter, update, options));

El método devuelve:

AcknowledgedUpdateResult{ matchedCount=0, modifiedCount=0, upsertedId=BsonObjectId{ value=606b4cfc1601f9443b5d6978 }}

Esto AcknowledgedUpdateResult nos dice:

  • Cero documentos coincidieron con nuestro filtro de consulta

  • Ningún documento de nuestra colección fue modificado

  • Se insertó un documento con un _id de 606b4cfc1601f9443b5d6978

A continuación se muestran los documentos de la colección paint_inventory:

{ "_id": { "$oid": "606b4cfbcd83be7518b958da" }, "color": "red", "qty": 5 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958db" }, "color": "purple", "qty": 8 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dc" }, "color": "blue", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dd" }, "color": "white", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958de" }, "color": "yellow", "qty": 6 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958df" }, "color": "pink", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e0" }, "color": "green", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e1" }, "color": "black", "qty": 8 }
{ "_id": { "$oid": "606b4cfc1601f9443b5d6978" }, "color": "orange", "qty": 10 }]

Nota

Si no se incluye UpdateOptions no se produce ningún cambio en la colección.

Bson filter = Filters.eq("color", "orange");
Bson update = Updates.inc("qty", 10);
System.out.println(collection.updateOne(filter, update));

El método devuelve:

AcknowledgedUpdateResult{ matchedCount=0, modifiedCount=0, upsertedId=null }

Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte la siguiente documentación de API:

  • UpdateOptions.inserción()

  • ReemplazarOpciones.upsert()

Volver

Actualizar elementos de la matriz

En esta página