Visão geral
Neste guia, você pode aprender como remover documentos de suas coleções MongoDB usando operações de exclusão.
Dados de amostra
O exemplo nesta aba usa o seguinte struct Book como um modelo para documentos na collection books:
type Book struct { Title string Author string Length int32 }
Para executar o exemplo nesta aba, carregue os dados de amostra na collection db.books com o seguinte trecho:
coll := client.Database("db").Collection("books") docs := []any{ Book{Title: "Atonement", Author: "Ian McEwan", Length: 351}, Book{Title: "My Brilliant Friend", Author: "Elena Ferrante", Length: 331}, Book{Title: "Lucy", Author: "Jamaica Kincaid", Length: 103}, Book{Title: "Outline", Author: "Rachel Cusk", Length: 258}, } result, err := coll.InsertMany(context.TODO(), docs)
Cada documento contém uma descrição de um livro que inclui o título, o autor e o comprimento da página correspondentes aos campos title, author e length em cada documento.
Dica
Bancos de Dados e Coleções Inexistentes
Se o banco de dados e a collection necessários não existirem quando você executar uma operação de escrita, o servidor implicitamente os criará.
Excluir operações
Use excluir operações para remover dados do MongoDB. As operações de exclusão consistem nos seguintes métodos:
DeleteOne(), que exclui o primeiro documento que corresponde ao filtroDeleteMany(), que exclui todos os documentos que correspondem ao filtro
Dica
Se um documento corresponder ao seu filtro ao executar o método DeleteMany(), será equivalente à execução do método DeleteOne().
Parâmetros
Os métodos DeleteOne() e DeleteMany() esperam que você passe um tipo Context e um filtro de query non-nil especificando quais documentos devem corresponder.
Ambos recebem opcionalmente um tipo DeleteOptions como terceiro parâmetro, que representa opções que você pode usar para configurar a operação de exclusão. Se você não especificar um DeleteOptions, o driver utilizará os valores padrão para cada opção.
O tipo DeleteOptions permite a você configurar opções com os seguintes métodos:
Método | Descrição |
|---|---|
| The index to use to scan for documents to delete. Default: nil |
| The type of language collation to use when sorting results. Default: nil |
Valor de retorno
Os métodos DeleteOne() e DeleteMany() retornam um tipo de DeleteResult. Este tipo contém a propriedade DeletedCount, que declara o número de documentos excluídos. Se não houver nenhuma correspondência com seu filtro, nenhum documento será excluído e DeletedCount será 0.
Exemplo
O exemplo abaixo executa o seguinte com o método DeleteMany():
Corresponde e exclui documentos onde o
lengthé maior que300Instrói o método para utilizar o
_idcomo o índice
filter := bson.D{{"length", bson.D{{"$gt", 300}}}} opts := options.Delete().SetHint(bson.D{{"_id", 1}}) result, err := coll.DeleteMany(context.TODO(), filter, opts) if err != nil { panic(err) } fmt.Printf("Number of documents deleted: %d\n", result.DeletedCount)
Number of documents deleted: 2
Dica
Se o exemplo anterior usasse o método DeleteOne() em vez de DeleteMany(), o driver excluiria o primeiro dos dois documentos correspondentes.
Exemplo de DeleteOne(): 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 Criar um MongoClient. Este exemplo também utiliza a coleção do restaurants no banco de dados do sample_restaurants incluído nosconjuntos de dados de amostra do Atlas do . Você pode carregá-los em seu banco de dados na camada grátis do MongoDB Atlas seguindo o Guia de Introdução ao Atlas.
O exemplo a seguir é um arquivo totalmente executável que localiza e exclui um documento existente na coleção restaurants.
// Deletes a document from a collection by using the Go driver package main import ( "context" "fmt" "log" "os" "github.com/joho/godotenv" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" ) // Defines a Restaurant struct as a model for documents in the "restaurants" collection type Restaurant struct { ID bson.ObjectID `bson:"_id"` Name string `bson:"name"` Cuisine string `bson:"cuisine,omitempty"` Address interface{} `bson:"address,omitempty"` Borough string `bson:"borough,omitempty"` Grades []interface{} `bson:"grades,omitempty"` } func main() { if err := godotenv.Load(); err != nil { log.Println("No .env file found") } var uri string if uri = os.Getenv("MONGODB_URI"); uri == "" { log.Fatal("You must set your 'MONGODB_URI' environment variable. See\n\t https://www.mongodb.com/pt-br/docs/drivers/go/current/connect/mongoclient/#environment-variable") } client, err := mongo.Connect(options.Client().ApplyURI(uri)) if err != nil { panic(err) } defer func() { if err = client.Disconnect(context.TODO()); err != nil { panic(err) } }() coll := client.Database("sample_restaurants").Collection("restaurants") filter := bson.D{{"name", "New Corner"}} // Deletes the first document that has a "name" value of "New Corner" result, err := coll.DeleteOne(context.TODO(), filter) // Prints a message if any errors occur during the operation if err != nil { panic(err) } // Prints the number of deleted documents fmt.Printf("Documents deleted: %d\n", result.DeletedCount) // When you run this file for the first time, it prints output similar to the following: // Documents deleted: 1 }
Documents deleted: 1
Exemplo de DeleteMany(): 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 Como criar um MongoClient. Este exemplo também utiliza a coleção do restaurants no banco de dados do sample_restaurants 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 Atlas.
O exemplo a seguir é um arquivo totalmente executável que executa as seguintes ações na coleção restaurants :
Corresponde e exclui documentos onde o valor do campo
cuisineéGermane o valor do campoboroughéQueensExclui todos os documentos correspondentes
// Deletes multiple documents from a collection by using the Go driver package main import ( "context" "fmt" "log" "os" "github.com/joho/godotenv" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" ) // Defines a Restaurant struct as a model for documents in the "restaurants" collection type Restaurant struct { ID bson.ObjectID `bson:"_id"` Name string `bson:"name"` Borough string `bson:"borough"` Cuisine string `bson:"cuisine"` } func main() { if err := godotenv.Load(); err != nil { log.Println("No .env file found") } var uri string if uri = os.Getenv("MONGODB_URI"); uri == "" { log.Fatal("You must set your 'MONGODB_URI' environment variable. See\n\t https://www.mongodb.com/pt-br/docs/drivers/go/current/connect/mongoclient/#environment-variable") } client, err := mongo.Connect(options.Client().ApplyURI(uri)) if err != nil { panic(err) } defer func() { if err = client.Disconnect(context.TODO()); err != nil { panic(err) } }() coll := client.Database("sample_restaurants").Collection("restaurants") filter := bson.D{ {"borough", "Queens"}, {"cuisine", "German"}, } // Deletes all documents that have a "Borough" value of "Queens" and a "Cuisine" value of "German" results, err := coll.DeleteMany(context.TODO(), filter) if err != nil { panic(err) } // Prints the number of deleted documents fmt.Printf("Documents deleted: %d\n", results.DeletedCount) // When you run this file for the first time, it prints output similar to the following: // Documents deleted: 6 }
Documents deleted: 6
Informações adicionais
Para saber mais sobre como executar as operações mencionadas, consulte os seguintes guias:
Para saber como o driver usa o Contexto, consulte Pacote de contexto.
Para saber mais sobre como especificar sugestões, consulte Índices.
Para saber mais sobre agrupamentos,consulte Agrupamento.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: