Docs Menu
Docs Home
/ /

Delete Documents

En esta guía, puede aprender cómo eliminar documentos con el controlador MongoDB Kotlin.

Puede eliminar documentos pasando un filtro de consulta a la deleteOne(), deleteMany() o findOneAndDelete() métodos:

  • deleteOne() Método: Elimina un solo documento. Si el filtro de consulta coincide con más de un documento, el método eliminará la primera coincidencia en la colección.

  • deleteMany() método: Elimina todos los documentos que coinciden con el filtro de consulta.

  • findOneAndDelete() Método: Busca y elimina la primera coincidencia en la colección. Devuelve el documento coincidente.

Para especificar una intercalación o sugerir un índice, utilice DeleteOptions como segundo parámetro para los métodos deleteOne() y deleteMany().

Para especificar una intercalación, sugerir un índice, especificar un orden de clasificación o especificar una proyección en el documento devuelto, utilice FindOneAndDeleteOptions como el segundo parámetro del método findOneAndDelete().

Tip

Al eliminar un solo documento, filtre su consulta por un índice único, como _id, para asegurarse de que su consulta coincida con el documento que desea eliminar.

Los siguientes ejemplos tratan sobre una tienda de pinturas que vende ocho colores diferentes. La tienda realizó su venta anual en línea, lo que resultó en los siguientes documentos en su colección paint_inventory:

{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 2, "color": "purple", "qty": 8 }
{ "_id": 3, "color": "blue", "qty": 0 }
{ "_id": 4, "color": "white", "qty": 0 }
{ "_id": 5, "color": "yellow", "qty": 6 }
{ "_id": 6, "color": "pink", "qty": 0 }
{ "_id": 7, "color": "green", "qty": 0 }
{ "_id": 8, "color": "black", "qty": 8 }

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

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

El sitio web de la tienda de pinturas muestra todos los documentos en la colección paint_inventory. Para reducir la confusión de los clientes, la tienda quiere remover los colores que están agotados.

Para eliminar los colores fuera de stock, consulte la colección paint_inventory donde qty es 0 y pase la consulta al método deleteMany():

val filter = Filters.eq("qty", 0)
collection.deleteMany(filter)

A continuación se muestran los documentos que quedan en la colección paint_inventory:

{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 2, "color": "purple", "qty": 8 }
{ "_id": 5, "color": "yellow", "qty": 6 }
{ "_id": 8, "color": "black", "qty": 8 }

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte Guía para conectarse a MongoDB. Este ejemplo también utiliza la movies colección de la sample_mflix base de datos incluida en Conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en la versión gratuita de MongoDB Atlas siguiendo la guía de introducción de MongoDB.

El siguiente ejemplo es un archivo completamente ejecutable que busca y elimina todos los documentos en la colección movies que contienen un rating menor que 2.9 en el subdocumento imdb:

import com.mongodb.MongoException
import com.mongodb.client.model.Filters
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
data class Movie(val imdb: IMDB){
data class IMDB(val rating: Double)
}
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 query = Filters.lt("${Movie::imdb.name}.${Movie.IMDB::rating.name}", 2.9)
try {
val result = collection.deleteMany(query)
println("Deleted document count: " + result.deletedCount)
} catch (e: MongoException) {
System.err.println("Unable to delete due to an error: $e")
}
mongoClient.close()
}
Deleted document count: 4

La tienda está donando la cantidad restante de pintura amarilla. Esto significa que el qty para el amarillo ahora es 0 y debemos retirar el amarillo de la colección.

Para eliminar el amarillo, consulte la colección paint_inventory donde color es "yellow" y pase la consulta al método deleteOne():

val filter = Filters.eq("color", "yellow")
collection.deleteOne(filter)

A continuación se muestran los documentos que quedan en la colección paint_inventory:

{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 2, "color": "purple", "qty": 8 }
{ "_id": 8, "color": "black", "qty": 8 }

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte movies la sample_mflix guía "Conectarse a MongoDB". Este ejemplo también utiliza la colección de la base de datos incluida en los conjuntos de datos de ejemplo de Atlas. Puede cargarlos en su base de datos en la versión gratuita de MongoDB Atlas siguiendo la guía "Introducción a MongoDB".

El siguiente ejemplo es un archivo totalmente ejecutable que realiza las siguientes acciones:

  • Utiliza el filtro eq() para hacer coincidir películas con el title que coincida exactamente con el texto 'The Garbage Pail Kids Movie'.

  • Elimina el único documento coincidente de la colección movies.

import com.mongodb.MongoException
import com.mongodb.client.model.Filters
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 query = Filters.eq(Movie::title.name, "The Garbage Pail Kids Movie")
try {
val result = collection.deleteOne(query)
println("Deleted document count: " + result.deletedCount)
} catch (e: MongoException) {
System.err.println("Unable to delete due to an error: $e")
}
mongoClient.close()
}

Cuando ejecuta el ejemplo, si el filtro de consulta que pasó en su llamada a deleteOne() coincide con un documento y lo elimina, verá un resultado similar al siguiente:

Deleted document count: 1

Si su filtro de consulta no coincide con un documento en su colección, su llamada a deleteOne() no elimina ningún documento y devuelve lo siguiente:

Deleted document count: 0

A la tienda le gustaría sortear la cantidad restante de pintura violeta y eliminar el violeta de la colección paint_inventory.

Para seleccionar un color, consulta la colección paint_inventory donde color es "purple" y pasa la consulta al método findOneAndDelete(). A diferencia de los demás métodos de eliminación, findOneAndDelete() devuelve el documento eliminado:

val filter = Filters.eq("color", "purple")
val result = collection.findOneAndDelete(filter)
println("The following was deleted: $result")
The following was deleted: PaintOrder(id=2, qty=8, color=purple)

Nota

Si no hay coincidencias con el filtro de query, no se borra ningún documento y el método retorna null.

A continuación se muestran los documentos que quedan en la colección paint_inventory:

{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 8, "color": "black", "qty": 8 }

Para obtener más información sobre los métodos y clases mencionados en esta guía, consulte los siguientes recursos:

Volver

Reemplazar Documentos

En esta página