Docs Menu
Docs Home
/ /

Insertar documentos

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 documento

  • insertMany() para insertar uno o más documentos

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(
@BsonId val id: ObjectId? = null,
val qty: Int,
val color: String
)

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 _id sea único.

  • Puede permitir que el controlador genere automáticamente un valor ObjectId único para cada documento _id. Si no establece manualmente un valor _id para un documento, el controlador rellena el campo con un ObjectId.

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.

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

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]

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

getInsertedId()

Indica el valor _id del documento insertado.

wasAcknowledged()

Devuelve true si el servidor reconoce el resultado.

Puede utilizar los siguientes métodos para recuperar información de una instancia InsertOneResult:

Método
Descripción

getInsertedIds()

Indica los valores _id de los documentos insertados.

wasAcknowledged()

Devuelve true si el servidor reconoce el resultado.

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.

Las siguientes secciones proporcionan ejemplos totalmente ejecutables que demuestran cómo insertar documentos utilizando los métodos insertOne() y insertMany().

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.

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(@BsonId 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=...}

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=...}}

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Bases de datos y colecciones

En esta página