Overview
En esta guía, puede aprender cómo insertar documentos con el controlador MongoDB Kotlin.
Puede usar MongoDB para recuperar, actualizar y eliminar información. Para realizar cualquiera de estas operaciones, dicha información, como perfiles de usuario y pedidos, debe existir en MongoDB. Para ello, primero debe realizar una operación de inserción.
Una operación de inserción inserta uno o varios documentos en MongoDB utilizando el insertOne(), insertMany() y bulkWrite() métodos.
Las siguientes secciones se centran en insertOne() y insertMany(). Para obtener información sobre cómo usar el método bulkWrite(), consulte nuestra
Guía sobre Operaciones a Granel.
En los siguientes ejemplos, una tienda de pinturas tiene un inventario de diferentes colores de pintura. Estos datos se modelan con la siguiente clase de datos de Kotlin:
data class PaintOrder( val id: ObjectId? = null, val qty: Int, val color: String )
Una nota acerca de _id
Al insertar un documento, MongoDB aplica una restricción en sus documentos de manera predeterminada: cada documento debe contener un _id campo único.
Existen dos maneras de gestionar este campo:
El mismo usuario puede gestionar este campo y asegurarse de que cada valor que use sea único.
Puede dejar que el controlador genere automáticamente valores ObjectId únicos.
A menos que hayas proporcionado garantías sólidas de singularidad, recomendamos que dejes que el controlador genere automáticamente valores de _id.
Nota
Los valores duplicados de _id infringen las restricciones de índice único, lo que resulta en un WriteError.
Para obtener información adicional sobre índices únicos, consulte la entrada del manual sobre índices únicos.
Inserta un solo documento
Utilice el método insertOne() cuando desee insertar un solo documento.
Tras una inserción exitosa, el método devuelve una instancia de InsertOneResult que representa el _id del nuevo documento.
Ejemplo
El siguiente ejemplo crea e inserta un documento utilizando el método insertOne():
val paintOrder = PaintOrder(ObjectId(), 5, "red") val result = collection.insertOne(paintOrder) val insertedId = result.insertedId?.asObjectId()?.value println("Inserted a document with the following id: $insertedId")
Inserted a document with the following id: 60930c39a982931c20ef6cd6
Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte los siguientes recursos:
insertOne() Documentación de la API
Documentación de la API deInsertOneResult
Explicación manual sobre insertOne()
Ejemplo ejecutable de inserción de un documento
Inserta varios documentos
Utiliza el método insertMany() cuando desees insertar varios documentos. Este método inserta documentos en el orden especificado hasta que ocurra una excepción, si es que hay alguna.
Por ejemplo, suponga que desea insertar los siguientes documentos:
{ "color": "red", "qty": 5 } { "color": "purple", "qty": 10 } { "color": "yellow", "qty": 3 } { "color": "blue", "qty": 8 }
Si intenta insertar estos documentos, aparece un WriteError en el tercer documento y los documentos anteriores al error se insertan en su colección.
Tip
Utilice un bloque try-catch para obtener una confirmación de los documentos procesados correctamente antes de que se produzca el error. La salida consiste en documentos que MongoDB puede procesar:
val result = collection.insertMany(paintOrders) try { println("Inserted documents with the following ids: ${result.insertedIds}") } catch(e: MongoBulkWriteException){ val insertedIds = e.writeResult.inserts.map { it.id.asInt32().value } println( "A MongoBulkWriteException occurred, but there are " + "successfully processed documents with the following ids: $insertedIds" ) collection.find().collect { println(it) } }
A MongoBulkWriteException occurred, but there are successfully processed documents with the following ids: [60930c3aa982931c20ef6cd7, 644ad1378ea29443837a14e9, 60930c3aa982931c20ef6cd8]
Si miras dentro de tu colección, deberías ver los siguientes documentos:
{ "color": "red", "qty": 5 } { "color": "purple", "qty": 10 }
Tras una inserción exitosa, el método devuelve una instancia InsertManyResult que representa el _id de cada nuevo documento.
Ejemplo
El siguiente ejemplo crea y agrega dos documentos a un List e inserta el List utilizando el método insertMany():
val paintOrders = listOf( PaintOrder(ObjectId(), 5, "red"), PaintOrder(ObjectId(), 10, "purple") ) val result = collection.insertMany(paintOrders) println("Inserted a document with the following ids: ${result.insertedIds.toList()}")
Inserted documents with the following ids: [60930c3aa982931c20ef6cd7, 60930c3aa982931c20ef6cd8]
Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte los siguientes recursos:
Documentación de la APIinsertMany()
Documentación de la APIInsertManyResult
Explicación manual sobre insertMany()
Ejemplo de inserción de varios documentos ejecutable
Resumen
Hay tres formas de realizar una operación de inserción, pero nos centraremos en dos:
El método
insertOne()inserta un solo documento.El método
insertMany()inserta múltiples documentos.
Ambos métodos generan automáticamente un _id si omite el campo en su documento.
Si la inserción es exitosa, ambos métodos devuelven una instancia que representa el _id de cada nuevo documento.