Menu Docs
Página inicial do Docs
/ / /
Driver GO
/ / /

Insira um documento

Nesta página

  • Visão geral
  • O campo _id
  • Insira um documento
  • Exemplo
  • Modificar Comportamento InsertOne
  • Insira vários documentos
  • Exemplo
  • Modificar Comportamento InsertMany
  • Ordered Comportamento
  • Informações adicionais
  • Documentação da API

Neste guia, você pode aprender como inserir documentos em uma coleção MongoDB.

Antes de localizar, atualizar e excluir documentos no MongoDB, você deve inserir esses documentos. Você pode inserir um documento usando o método InsertOne() ou inserir vários documentos usando o método InsertMany() ou BulkWrite().

As seções a seguir concentram-se em InsertOne() e InsertMany(). Para saber como usar o método BulkWrite(), consulte o guia de operações em massa.

No MongoDB, cada documento deve conter um campo _id exclusivo.

As duas opções para gerenciar este campo são:

  • Gerenciando você mesmo esse campo, garantindo que cada valor usado seja único.

  • Permitir que o driver gere automaticamente valores ObjectId exclusivos. O driver gera valores ObjectId exclusivos para documentos que você não especifica explicitamente como _id.

A menos que você ofereça garantias rubustas de exclusividade, o MongoDB recomenda que você deixe o driver gerar automaticamente os valores de _id.

Observação

Os valores duplicados de _id violam restrições de índice único, o que faz com que o driver retorne um WriteError.

Para saber mais sobre o campo _id, consulte a entrada manual do servidor em Índices únicos.

Para saber mais sobre a estrutura e as regras dos documentos, consulte a Entrada do Manual do Servidor sobre Documentos.

Use o método InsertOne() para inserir um único documento em uma coleção.

Após a inserção bem-sucedida, o método retorna uma instância InsertOneResult que contém o _id do novo documento.

Este exemplo utiliza a seguinte estrutura Book como um modelo para documentos na collection books:

type Book struct {
Title string
Author string
}

O exemplo seguinte cria e insere um documento na coleção books utilizando o método InsertOne():

coll := client.Database("db").Collection("books")
doc := Book{Title: "Atonement", Author: "Ian McEwan"}
result, err := coll.InsertOne(context.TODO(), doc)
fmt.Printf("Inserted document with _id: %v\n", result.InsertedID)
Inserted document with _id: ObjectID("...")

Você pode modificar o comportamento de InsertOne() construindo e passando uma estrutura InsertOneOptions opcional. As opções disponíveis para configurar com InsertOneOptions são:

Opção
Descrição
BypassDocumentValidation
If true, allows the write to opt-out of document level validation.
Default: false

Crie InsertOneOptions da seguinte forma:

opts := options.InsertOne().SetBypassDocumentValidation(true)

Use o método InsertMany() para inserir vários documentos em uma coleção.

Após a inserção bem-sucedida, o método InsertMany() retorna uma instância InsertManyResult que contém os campos _id dos documentos inseridos.

O exemplo seguinte cria e insere vários documentos na coleção books utilizando o método InsertMany():

coll := client.Database("myDB").Collection("favorite_books")
docs := []interface{}{
Book{Title: "Cat's Cradle", Author: "Kurt Vonnegut Jr."},
Book{Title: "In Memory of Memory", Author: "Maria Stepanova"},
Book{Title: "Pride and Prejudice", Author: "Jane Austen"},
}
result, err := coll.InsertMany(context.TODO(), docs)
fmt.Printf("Documents inserted: %v\n", len(result.InsertedIDs))
for _, id := range result.InsertedIDs {
fmt.Printf("Inserted document with _id: %v\n", id)
}

Depois de executar o código anterior, seu resultado será semelhante ao seguinte:

Documents inserted: 3
Inserted document with _id: ObjectID("...")
Inserted document with _id: ObjectID("...")
Inserted document with _id: ObjectID("...")

Você pode modificar o comportamento de InsertMany() construindo e passando uma estrutura InsertManyOptions opcional. As opções disponíveis para configurar com InsertManyOptions são:

Opção
Descrição
BypassDocumentValidation
If true, allows the write to opt-out of document level validation.
Default: false
Ordered
If true, the driver sends documents to the server in the order provided. If an error occurs, the driver and server end all remaining insert operations. To learn more, see Ordered Behavior.
Default: false

Crie InsertManyOptions da seguinte forma:

opts := options.InsertMany().SetBypassDocumentValidation(true).SetOrdered(false)

Suponha que você queira inserir os seguintes documentos:

{ "_id": 1, "title": "Where the Wild Things Are" }
{ "_id": 2, "title": "The Very Hungry Caterpillar" }
{ "_id": 1, "title": "Blueberries for Sal" }
{ "_id": 3, "title": "Goodnight Moon" }

Se você tentar inserir esses documentos com InsertManyOptions padrão, ocorrerá uma BulkWriteException no terceiro documento devido ao valor de _id repetido, mas os documentos antes do documento de produção de erro ainda serão inseridos em sua coleção.

Observação

Você pode obter um reconhecimento da inserção bem-sucedida do documento, mesmo que ocorra uma BulkWriteException:

type Book struct {
ID int `bson:"_id"`
Title string
}
...
docs := []interface{}{
Book{ID: 1, Title: "Where the Wild Things Are"},
Book{ID: 2, Title: "The Very Hungry Caterpillar"},
Book{ID: 1, Title: "Blueberries for Sal"},
Book{ID: 3, Title: "Goodnight Moon"},
}
result, err := coll.InsertMany(context.TODO(), docs)
if err != nil {
fmt.Printf("A bulk write error occurred, but %v documents were still inserted.\n", len(result.InsertedIDs))
}
for _, id := range result.InsertedIDs {
fmt.Printf("Inserted document with _id: %v\n", id)
}
A bulk write error occurred, but 2 documents were still inserted.
Inserted document with _id: 1
Inserted document with _id: 2

Depois de executar o código anterior, sua coleção contém os seguintes documentos:

{ "_id": 1, "title": "Where the Wild Things Are" }
{ "_id": 2, "title": "The Very Hungry Caterpillar" }

Para exemplos executáveis das operações de inserção, consulte os seguintes exemplos de uso:

Para saber mais sobre como executar as operações mencionadas, consulte os seguintes guias:

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Operações de Escrita