Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Delete Documents

En esta guía, puedes aprender a remover documentos con el controlador MongoDB Kotlin.

Puedes remover documentos pasando un filtro de query a la deleteOne()los métodos deleteMany() o findOneAndDelete():

  • deleteOne() method: elimina un único documento. Si el filtro de query coincide con más de un documento, el método removerá la primera aparición de una coincidencia en la colección.

  • deleteMany() method: Elimina todos los documentos que coinciden con el filtro de query.

  • findOneAndDelete() método: encuentra y borra la primera ocurrencia de una coincidencia en la colección. Devuelve el documento coincidente.

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

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

Tip

Al borrar un solo documento, debes filtrar la query por un índice único, como un _id, para asegurarte de que la query se corresponde con el documento que se quiere borrar.

Los siguientes ejemplos son sobre una tienda de pinturas que vende ocho colores diferentes de pintura. La tienda tuvo 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 de 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 remover los colores agotados, query la colección paint_inventory donde el qty es 0 y pasa la query al método deleteMany():

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

A continuación se muestran los documentos restantes 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 utilizando un URI de conexión. Para obtener más información sobre cómo conectarse a tu instancia de MongoDB, consulta el La guía Conéctate a MongoDB. Este ejemplo también utiliza la colección movies en la base de datos sample_mflix incluida en la Conjuntos de datos de muestra de Atlas. Puedes cargarlos en tu base de datos en el nivel gratuito de MongoDB Atlas siguiendo la guía Primeros pasos de MongoDB.

El siguiente ejemplo es un archivo completamente ejecutable que encuentra y elimina todos los documentos en la colección movies que contienen un rating de menos de 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 su pintura amarilla. Esto significa que el qty para el amarillo ahora es 0 y debemos remover el amarillo de la colección.

Para remover el amarillo, query la colección paint_inventory donde el color sea "yellow" y pasa la query al método deleteOne():

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

A continuación se muestran los documentos restantes 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 utilizando un URI de conexión. Para aprender más sobre cómo conectarse a su instancia de MongoDB, consulte la Guía de Conexión a MongoDB. Este ejemplo también utiliza la colección movies en la base de datos sample_mflix incluida en los conjuntos de datos de muestra de Atlas. Puedes cargarlos en tu base de datos en el nivel gratuito de MongoDB Atlas siguiendo la guía Empezar de MongoDB.

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

  • Utiliza el filtro eq() para que los títulos de películas con el/la title coincidan exactamente con el término '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 ejecutes el ejemplo, si el filtro de query que pasaste en tu llamada a deleteOne() coincide con un documento y lo remueve, verás una salida similar a la siguiente:

Deleted document count: 1

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

Deleted document count: 0

Al almacenar le gustaría rifar la cantidad restante de pintura morada y remover el color morado de la colección paint_inventory.

Para seleccionar un color, consulta la colección paint_inventory donde color sea "purple" y pasa la query al método findOneAndDelete(). A diferencia de los otros métodos de borrado, 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 restantes 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, consulta los siguientes recursos:

Volver

Reemplazar Documentos

En esta página