Visão geral
Neste guia, você pode aprender como remover documentos com o driver MongoDB Kotlin.
Você pode remover documentos passando um filtro de queries para os métodos deleteOne(), deleteMany() ou findOneAndDelete():
deleteOne()método: Exclui um único documento. Se o filtro de queries 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 queries.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 coleção do movies no banco de dados do sample_mflix 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 localiza e exclui todos os documentos na coleção 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 coleção do movies no banco de dados do sample_mflix 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 coleção
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 queries 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:
Documentação da APIdeleteOne ()
Documentação da APIdeleteMany()
Documentação da APIfindOneAndDelete()
Documentaçãoda API DeleteOptions
Documentação da APIFindOneAndDeleteOptions
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