Insira um documento
Nesta página
Visão geral
Neste guia, você pode aprender como inserir documentos em uma coleção MongoDB.
Para localizar, atualizar e excluir documentos no MongoDB, é necessário 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()
.
O campo _id
No MongoDB, cada documento deve conter um campo _id
exclusivo.
As duas opções para gerenciar este campo são:
Você mesmo pode gerenciar esse campo, garantindo que cada valor usado seja exclusivo.
Você pode permitir que o acionador gere automaticamente valores únicos de
ObjectId
. O driver gera valoresObjectId
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.
Insira um documento
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.
Exemplo
O exemplo seguinte cria e insere um documento na coleção favorite_books
utilizando o método InsertOne()
:
coll := client.Database("myDB").Collection("favorite_books") doc := bson.D{{"title", "Invisible Cities"}, {"author", "Italo Calvino"}, {"year_published", 1974}} result, err := coll.InsertOne(context.TODO(), doc) fmt.Printf("Inserted document with _id: %v\n", result.InsertedID)
Modificar Comportamento do InsertOne
Você pode modificar o comportamento de InsertOne()
construindo e passando uma estrutura InsertOneOptions
opcional. As opções disponíveis para sincroniza com o 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)
Insira vários documentos
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.
Exemplo
O exemplo seguinte cria e insere alguns documentos na coleção favorite_books
utilizando o método InsertMany()
:
coll := client.Database("myDB").Collection("favorite_books") docs := []interface{}{ bson.D{{"title", "My Brilliant Friend"}, {"author", "Elena Ferrante"}, {"year_published", 2012}}, bson.D{{"title", "Lucy"}, {"author", "Jamaica Kincaid"}, {"year_published", 2002}}, bson.D{{"title", "Cat's Cradle"}, {"author", "Kurt Vonnegut Jr."}, {"year_published", 1998}}, } result, err := coll.InsertMany(context.TODO(), docs) list_ids := result.InsertedIDs fmt.Printf("Documents inserted: %v\n", len(list_ids)) for _, id := range list_ids { fmt.Printf("Inserted document with _id: %v\n", id) }
Sua saída deve ser semelhante a esta:
Documents inserted: 3 Inserted document with _id: ObjectID("...") Inserted document with _id: ObjectID("...") Inserted document with _id: ObjectID("...")
Modificar Comportamento do InsertMany
Você pode modificar o comportamento de InsertMany()
construindo e passando uma estrutura InsertOneOptions
opcional. As opções disponíveis para sincroniza com o InsertOneOptions
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 abort all remaining insert operations.
To learn more, see Ordered Behavior.Default: false |
Crie InsertManyOptions
da seguinte forma:
opts := options.InsertMany().SetBypassDocumentValidation(true).SetOrdered(false)
Ordered
Comportamento
Suponha que você queira inserir os seguintes documentos:
{ "_id": 1, "country": "Tanzania" } { "_id": 2, "country": "Lithuania" } { "_id": 1, "country": "Vietnam" } { "_id": 3, "country": "Argentina" }
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:
docs := []interface{}{ bson.D{{"_id", 1}, {"country", "Tanzania"}}, bson.D{{"_id", 2}, {"country", "Lithuania"}}, bson.D{{"_id", 1}, {"country", "Vietnam"}}, bson.D{{"_id", 3}, {"country", "Argentina"}}, } result, err := coll.InsertMany(context.TODO(), docs) list_ids := result.InsertedIDs if err != nil { fmt.Printf("A bulk write error occurred, but %v documents were still inserted.\n", len(list_ids)) } for _, id := range list_ids { fmt.Printf("Inserted document with _id: %v\n", id) }
Se você examinar sua coleção, poderá ver os seguintes documentos:
{ "_id": 1, "country": "Tanzania" } { "_id": 2, "country": "Lithuania" }
Informações adicionais
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:
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: