Overview
En esta guía, puede aprender a usar el controlador Kotlin para agregar documentos a una colección MongoDB realizando operaciones de inserción.
Una operación de inserción inserta uno o más documentos en una colección de MongoDB. Puedes realizar una operación de inserción mediante los siguientes métodos:
insertOne()para insertar un solo documentoinsertMany()para insertar uno o más documentos
Datos de muestra
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 )
El campo _id
En una colección MongoDB, cada documento debe contener un _id campo que tenga un valor único.
MongoDB permite gestionar este campo de dos formas:
Uno mismo puede configurar este campo para cada documento, asegurando que el valor de cada campo
_idsea único.Puede permitir que el controlador genere automáticamente un valor
ObjectIdúnico para cada documento_id. Si no establece manualmente un valor_idpara un documento, el controlador rellena el campo con unObjectId.
A menos que pueda garantizar la singularidad, recomendamos dejar que el controlador genere automáticamente valores _id.
Nota
Errores de _id duplicados
Establecer valores de _id duplicados en una colección infringe las restricciones de índices únicos, lo que provoca que el controlador devuelva un WriteError del método insertOne() o un BulkWriteError del método insertMany().
Para obtener más información sobre el campo _id, consulte la
Guía deíndices únicos en el manual del servidor MongoDB.
Para obtener más información sobre la estructura y las reglas de los documentos, consulte la guía Documentos en el manual del servidor MongoDB.
Inserta un 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.
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
Inserta varios documentos
Para agregar varios documentos a una colección de MongoDB, use el método insertMany() y pase la lista de documentos que desea agregar. El método insertMany() inserta los documentos en el orden especificado hasta que se produzca una excepción, si la hubiera.
Si tiene éxito, el método devuelve una instancia InsertManyResult que representa el _id de cada nuevo documento.
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 documents with the following ids: ${result.insertedIds.toList()}")
Inserted documents with the following ids: [60930c3aa982931c20ef6cd7, 60930c3aa982931c20ef6cd8]
Valor de retorno
El método insertOne() devuelve una instancia InsertOneResult y el método insertMany() devuelve una instancia InsertManyResult.
Puede utilizar los siguientes métodos para recuperar información de una instancia InsertOneResult:
Método | Descripción |
|---|---|
| Indica el valor |
| Devuelve |
Puede utilizar los siguientes métodos para recuperar información de una instancia InsertOneResult:
Método | Descripción |
|---|---|
| Indica los valores |
| Devuelve |
Nota
Si el método wasAcknowledged() devuelve false, al intentar acceder a los valores _id se genera una excepción InvalidOperation. El controlador no puede determinar estos valores si el servidor no confirma la operación de escritura.
Ejemplos totalmente ejecutables
Las siguientes secciones proporcionan ejemplos totalmente ejecutables que demuestran cómo insertar documentos utilizando los métodos insertOne() y insertMany().
Datos de muestra
Los ejemplos de esta sección utilizan la sample_movies.movies colección de los conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte la guía de introducción de MongoDB.
Ejemplo de insertOne(): Archivo completo
El siguiente ejemplo se conecta a un clúster MongoDB, crea un objeto MongoClient e inserta un solo documento en la colección movies mediante el método insertOne():
import com.mongodb.MongoException import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking import org.bson.codecs.pojo.annotations.BsonId import org.bson.types.ObjectId data class Movie( val id: ObjectId, val title: String, val genres: List<String>) fun main() = runBlocking { // Replace the uri string with your MongoDB deployment's connection string val uri = "<connection string uri>" val mongoClient = MongoClient.create(uri) val database = mongoClient.getDatabase("sample_mflix") val collection = database.getCollection<Movie>("movies") try { val result = collection.insertOne( Movie(ObjectId(), "Ski Bloopers", listOf("Documentary", "Comedy")) ) println("Success! Inserted document id: " + result.insertedId) } catch (e: MongoException) { System.err.println("Unable to insert due to an error: $e") } mongoClient.close() }
Success! Inserted document id: BsonObjectId{value=...}
insertMany() Ejemplo: archivo completo
El siguiente ejemplo se conecta a un clúster MongoDB, crea un objeto MongoClient e inserta varios documentos en la colección movies mediante el método insertMany():
import com.mongodb.MongoException import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking data class Movie(val title: String) fun main() = runBlocking { // Replace the uri string with your MongoDB deployment's connection string val uri = "<connection string uri>" val mongoClient = MongoClient.create(uri) val database = mongoClient.getDatabase("sample_mflix") val collection = database.getCollection<Movie>("movies") val movieList = listOf( Movie("Short Circuit 3"), Movie("The Lego Frozen Movie") ) try { val result = collection.insertMany(movieList) println("Success! Inserted document ids: " + result.insertedIds) } catch (e: MongoException) { System.err.println("Unable to insert due to an error: $e") } mongoClient.close() }
Success! Inserted document ids: {0=BsonObjectId{value=...}, 1=BsonObjectId{value=...}}
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: