Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Insertar o Actualizar en una Operación Única

En esta guía, puede aprender cómo realizar una inserción con el driver de MongoDB para Kotlin.

Las aplicaciones utilizan operaciones de inserción y actualización para almacenar y modificar datos. A veces, necesitas elegir entre una inserción o una actualización dependiendo de si el documento existe. MongoDB simplifica esta decisión para nosotros con un upsert opción.

An upsert:

  • Actualiza documentos que coinciden con tu filtro de query

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

Para especificar una inserción con los métodos updateOne() o updateMany(), pasa 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 de pintura. La tienda tuvo 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 }

Estos datos se modelan con la siguiente clase de datos de Kotlin:

data class PaintOrder(
@BsonId val id: ObjectId = ObjectId(),
val qty: Int,
val color: String
)

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, query la colección paint_inventory donde el color sea "orange", especifica una actualización para increment el campo qty en 10, y especifica true a UpdateOptions.upsert():

val filter = Filters.eq(PaintOrder::color.name, "orange")
val update = Updates.inc(PaintOrder::qty.name, 10)
val options = UpdateOptions().upsert(true)
val results = collection.updateOne(filter, update, options)
println(results)
AcknowledgedUpdateResult{ matchedCount=0, modifiedCount=0, upsertedId=BsonObjectId{ value=606b4cfc1601f9443b5d6978 }}

Esto AcknowledgedUpdateResult nos dice:

  • Ningún documento coincidió con nuestro filtro de query

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

  • Se insertó o actualizó un documento con un _id de 606b4cfc1601f9443b5d6978.

Lo siguiente muestra los documentos en 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

No incluir UpdateOptions no genera ningún cambio en la colección.

val filter = Filters.eq(PaintOrder::color.name, "orange")
val update = Updates.inc(PaintOrder::qty.name, 10)
val results = collection.updateOne(filter, update)
println(results)
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 la API:

  • UpdateOptions.inserción()

  • ReemplazarOpciones.upsert()

Volver

Update Documents

En esta página