Visão geral
Neste guia, você pode aprender como remover documentos com o driver MongoDB Kotlin.
Você pode remover documentos passando um filtro de query para os métodos deleteOne(), deleteMany() ou findOneAndDelete():
deleteOne()método: Exclui um único documento. Se o filtro de consulta corresponder a mais de um documento, o método removerá a primeira ocorrência de uma correspondência na coleção.deleteMany()método: Exclui todos os documentos que correspondem ao filtro de query.findOneAndDelete()método: Localiza e exclui a primeira ocorrência de uma correspondência na coleção. Retorna o documento correspondente .
Para especificar um agrupamento ou sugerir um índice, use DeleteOptions como segundo parâmetro para os métodos deleteOne() e deleteMany() .
Para especificar um agrupamento, sugerir um índice, especificar a ordem de classificação ou especificar uma projeção no documento retornado, use FindOneAndDeleteOptions como o segundo parâmetro para o método findOneAndDelete() .
Dica
Ao excluir um único documento, filtre sua query por um índice único, como um _id, para garantir que sua query corresponda ao documento que você deseja excluir.
Documentos de amostra
Os exemplos a seguir são sobre uma loja de tintas que vende oito cores diferentes de tinta. A loja tinha sua venda online anual resultando nos seguintes documentos em sua coleção 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 }
Esses dados são modelados com a seguinte classe de dados Kotlin:
data class PaintOrder( val id: Int, val qty: Int, val color: String )
Excluir muitos documentos
O site da loja de tintas exibe todos os documento na collection paint_inventory . Para reduzir a confusão do cliente, a loja deseja remover as cores que estão esgotadas.
Para remover as cores esgotadas, faça query da collection paint_inventory onde qty é 0 e passe a query para o método deleteMany() :
val filter = Filters.eq("qty", 0) collection.deleteMany(filter)
O seguinte mostra o documento restante na collection 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 }
deleteMany() Exemplo: Arquivo Completo
Observação
Exemplo de configuração
Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB , consulte o guia Conectar ao MongoDB . Este exemplo também utiliza a movies coleção do no sample_mflix banco de dados do incluído no conjunto de dados de amostra do Atlas. Você pode carregá-los em seu banco de dados na camada grátis do MongoDB Atlas seguindo o guia de Introdução ao MongoDB .
O exemplo a seguir é um arquivo totalmente executável que localiza e exclui todos os documentos na collection movies que contêm rating menor que 2.9 no 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
Excluir um documento
A loja está doando a quantidade restante de sua tinta amarela. Isso significa que o qty para o amarelo agora é 0 e precisamos remover o amarelo da collection.
Para remover o amarelo, execute uma consulta na coleção paint_inventory onde color seja "yellow" e utilize essa consulta no método deleteOne():
val filter = Filters.eq("color", "yellow") collection.deleteOne(filter)
O seguinte mostra o documento restante na collection paint_inventory :
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 8, "color": "black", "qty": 8 }
deleteOne() Exemplo: Arquivo Completo
Observação
Exemplo de configuração
Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB , consulte o guia Conectar ao MongoDB . Este exemplo também utiliza a movies coleção do no sample_mflix banco de dados do incluído nos conjuntos de dados de amostra do Atlas . Você pode carregá-los em seu banco de dados na camada grátis do MongoDB Atlas seguindo o guia de Introdução ao MongoDB .
O exemplo a seguir é um arquivo totalmente executável que executa as seguintes ações:
Utiliza o filtro
eq()para corresponder a filmes com otitlecorrespondendo exatamente ao texto'The Garbage Pail Kids Movie'.Exclui o único documento correspondente da collection
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() }
Ao executar o exemplo, se o filtro de query que você passou em sua chamada para deleteOne() corresponder a um documento e removê-lo, você verá uma saída semelhante a esta:
Deleted document count: 1
Se a sua query não corresponder a um documento na sua collection, a sua chamada para deleteOne() não removerá nenhum documento e retornará o seguinte:
Deleted document count: 0
Localize e exclua um documento
A loja gostaria de distribuir a quantidade restante de tinta púrpura e remover a cor púrpura da collection paint_inventory .
Para escolher uma cor, faça query da collection paint_inventory onde color é "purple" e passe a query para o método findOneAndDelete() . Ao contrário dos outros métodos de exclusão, o findOneAndDelete() retorna o documento excluído:
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)
Observação
Se não houver nenhuma correspondência com seu filtro de query, nenhum documento será excluído e o método retornará null.
O seguinte mostra o documento restante na collection paint_inventory :
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 8, "color": "black", "qty": 8 }
Para obter mais informações sobre os métodos e classes mencionadas neste guia, consulte os seguintes recursos:
db.coleção.deleteOne() MongoDB Entrada manual do servidor
db.coleção.deleteMany() MongoDB Entrada manual do servidor
db.coleção.findOneAndDelete() MongoDB Entrada manual do servidor