Menu Docs
Página inicial do Docs
/ / /
C#/.NET
/ / /

Insira documentos

Nesta página

  • Visão geral
  • Dados de amostra
  • O campo _id
  • Inserir um documento
  • Insira vários documentos
  • Modificar comportamento de inserção
  • Exemplo
  • Especificar comportamento ordenado
  • Informações adicionais
  • Documentação da API

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() ou InsertOne()

  • InsertManyAsync() ou InsertMany()

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.

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; }
[BsonElement("restaurant_id")]
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; }
[BsonElement("coord")]
public double[] Coordinates { get; set; }
public string Street { get; set; }
[BsonElement("zipcode")]
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.

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 uma ObjectId.

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.

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);

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.

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

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.

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" }

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

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