Overview
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.
Especificar una inserción
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( 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
_idde606b4cfc1601f9443b5d6978.
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: