Insira documentos
Nesta página
Visão geral
Neste guia, você pode aprender como usar o Driver MongoDB .NET/C# para adicionar documentos a uma coleção MongoDB realizando operações de inserção.
Uma operação de inserção insere um ou mais documentos em uma coleção MongoDB. O driver .NET/C# fornece os seguintes métodos para executar operações de inserção, cada um dos quais tem uma versão assíncrona e síncrona:
InsertOneAsync()
ouInsertOne()
InsertManyAsync()
ouInsertMany()
Dica
Laboratório interativo
Esta página inclui um breve laboratório interativo que demonstra como inserir dados usando o método InsertOneAsync()
. Você pode concluir este laboratório diretamente na janela do seu navegador sem instalar o MongoDB ou um editor de código.
Para iniciar o laboratório, clique no botão Open Interactive Tutorial na parte superior da página. Para expandir o laboratório para um formato de tela inteira, clique no botão de tela inteira (⛶) no canto superior direito do painel do laboratório.
Dados de amostra
Os exemplos neste guia utilizam a coleção do restaurants
a partir do banco de dados do sample_restaurants
. Os documentos nesta coleção usam as seguintes classes Restaurant
, Address
e GradeEntry
como modelos:
public class Restaurant { public ObjectId Id { get; set; } public string Name { get; set; } [ ] public string RestaurantId { get; set; } public string Cuisine { get; set; } public Address Address { get; set; } public string Borough { get; set; } public List<GradeEntry> Grades { get; set; } }
public class Address { public string Building { get; set; } [ ] public double[] Coordinates { get; set; } public string Street { get; set; } [ ] public string ZipCode { get; set; } }
public class GradeEntry { public DateTime Date { get; set; } public string Grade { get; set; } public float? Score { get; set; } }
Observação
Os documentos na coleção restaurants
usam a convenção de nomenclatura de camelo. Os exemplos neste guia usam um ConventionPack
para desserializar os campos na coleção em maiúsculas e minúsculas Pascal e mapeá-los para as propriedades na classe Restaurant
.
Para saber mais sobre serialização personalizada, consulte Serialização personalizada.
Essa coleção é dos conjuntos de dados de amostra fornecidos pelo Atlas. Consulte o Quick Start para saber como criar um cluster MongoDB gratuito e carregar esses dados de amostra.
O _id
campo
Em uma coleção MongoDB, cada documento deve conter um campo _id
com um valor de campo único.
O MongoDB permite gerenciar este campo de duas maneiras:
Você mesmo pode definir este campo para cada documento, garantindo que cada valor do campo
_id
seja único.Você pode permitir que o acionador gere automaticamente valores de
ObjectId
únicos para cada documento_id
. Se você não definir manualmente um valor de campo_id
para um documento, o driver preencherá o campo com umaObjectId
.
A menos que você possa garantir exclusividade, o MongoDB recomenda que você deixe o driver gerar automaticamente os valores do _id
.
Observação
_id
Os valores _id
duplicados violam as restrições de índice exclusivo, o que faz com que o driver retorne um MongoWriteException
de InsertOne()
ou um MongoBulkWriteException
de InsertMany()
.
Para saber mais sobre o campo _id
, consulte a Entrada manual do servidor sobre Índices únicos.
Para saber mais sobre a estrutura e as regras dos documentos, consulte a Entrada do Manual do Servidor sobre Documentos.
Inserir um documento
O código abaixo mostra como usar o método InsertOneAsync()
assíncrono ou o método InsertOne()
síncrono para inserir um documento.
await _restaurantsCollection.InsertOneAsync(document);
_restaurantsCollection.InsertOne(document);
Insira vários documentos
O seguinte código mostra como utilizar o método InsertManyAsync()
assíncrono ou o método InsertMany()
síncrono para inserir vários documentos.
await _restaurantsCollection.InsertManyAsync(docs);
_restaurantsCollection.InsertMany(docs);
Dica
Encontre exemplos executáveis usando esses métodos em informações adicionais.
Modificar comportamento de inserção
O método InsertOne()
usa o documento que você deseja inserir como parâmetro. O método InsertMany()
usa uma coleção IEnumerable
de documentos, como uma lista ou array, como parâmetro.
O método InsertOne()
recebe opcionalmente um tipo InsertOneOptions
como parâmetro adicional, que representa as opções que você pode usar para configurar a operação de inserção. Se você não especificar nenhuma propriedade InsertOneOptions
, o driver não personalizará a inserção.
O tipo InsertOneOptions
permite a você configurar opções com as seguintes propriedades:
Propriedade | Descrição |
---|---|
BypassDocumentValidation | Gets or sets a value indicating whether to bypass document
validation. If true , allows the write to opt-out of
document level validation. |
Comment | Gets or sets the comment for the operation. See the insert command
fields
for more information. |
O método InsertMany()
opcionalmente usa um tipo InsertManyOptions
como um parâmetro adicional, que tem as propriedades BypassDocumentValidation
e Comment
anteriores e a propriedade IsOrdered
adicional:
Propriedade | Descrição |
---|---|
IsOrdered | Gets or sets a value indicating whether the requests are
fulfilled in order. 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: true |
Exemplo
O código abaixo usa o método InsertMany()
para inserir quatro documentos novos Restaurant
em uma collection com BypassDocumentValidation
definido como true
:
var restaurantsList = new List<Restaurant>() { new() { Name = "Été Bleu", Cuisine = "French" }, new() { Name = "Lucky Bird", Cuisine = "Café/Coffee/Tea" }, new() { Name = "Wildflower Café", Cuisine = "Vegetarian" }, new() { Name = "Blue Moon Grill", Cuisine = "American" }, }; var options = new InsertManyOptions() { BypassDocumentValidation = true }; Console.WriteLine("Inserting documents..."); _restaurantsCollection.InsertMany(restaurantsList, options);
O método InsertMany()
não tem valor de retorno. Você pode verificar se seus documentos foram inseridos corretamente executando uma operação Find()
na collection. Para obter um exemplo de como localizar um documento, consulte Como localizar um documento.
Especificar comportamento ordenado
Suponha que você queira inserir os seguintes documentos:
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" } { "_id" : 1, "name" : "Restaurant C" } { "_id" : 3, "name" : "Restaurant D" }
Se você tentar inserir esses documentos com InsertManyOptions
padrão, o driver lançará uma MongoBulkWriteException
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.
Se você examinar sua coleção, poderá ver os seguintes documentos:
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" }
Se você definir IsOrdered
como false
na operação de inserção, o driver continuará inserindo seus documentos mesmo que alguns documentos produzam erros. Com esse comportamento de inserção modificado, o driver lança uma exceção, mas insere todos os documentos que não produzem erros.
Se você examinar sua coleção, poderá ver os seguintes documentos:
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" } { "_id" : 3, "name" : "Restaurant D" }
Informações adicionais
Para exemplos executáveis das operações de inserção, consulte os seguintes exemplos de uso:
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: