Docs Menu
Docs Home
/ /

Insertar documentos

En esta guía, puedes aprender a usar el controlador de MongoDB .NET/C# para agregar documentos a una colección de MongoDB mediante la realización de operaciones de inserción.

Nota

Límite de tamaño de 16 MB

MongoDB limita los documentos BSON individuales a 16 MB. Si su documento tiene más de 16 MB, utilice el API deGridFS en su lugar.

Una operación de inserción inserta uno o más documentos en una colección de MongoDB. El controlador .NET/C# proporciona los siguientes métodos para realizar operaciones de inserción, cada uno con una versión asíncrona y otra síncrona:

  • InsertOneAsync() or InsertOne()

  • InsertManyAsync() or InsertMany()

Tip

Interactive Lab

Esta página incluye un breve laboratorio interactivo que demuestra cómo insertar datos utilizando el método InsertOneAsync(). Se puede completar este laboratorio directamente en la ventana del navegador sin instalar MongoDB ni un editor de código.

Para iniciar el laboratorio, haga clic en el Open Interactive Tutorial Botón en la parte superior de la página. Para ampliar el laboratorio a pantalla completa, haga clic en el botón de pantalla completa () en la esquina superior derecha del panel del laboratorio.

Los ejemplos de esta guía utilizan la colección restaurants de la base de datos sample_restaurants. Los documentos de esta colección utilizan las siguientes clases Restaurant, Address y 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; }
}

Nota

Los documentos de la colección restaurants utilizan la convención de nomenclatura snake-case. Los ejemplos de esta guía utilizan un ConventionPack para deserializar los campos de la colección en notación Pascal y asignarlos a las propiedades de la clase Restaurant.

Para aprender más sobre la serialización personalizada, consultar Serialización personalizada.

Esta colección es de la Conjuntos de datos de muestra proporcionados por Atlas. Consulte la Guía de inicio rápido para aprender a crear un clúster gratuito de MongoDB y cargar estos datos de muestra.

En una colección de MongoDB, cada documento debe contener un campo _id con un valor de campo único.

MongoDB permite gestionar este campo de dos formas:

  • Uno mismo puede configurar este campo para cada documento, asegurando que el valor de cada campo _id sea único.

  • Puede permitir que el controlador genere automáticamente valores únicos de ObjectId para cada documento _id. Si no configura manualmente un valor de campo _id para un documento, el controlador rellenará el campo con un ObjectId.

A menos que puedas garantizar la unicidad, MongoDB recomienda que dejes que el controlador genere automáticamente valores de _id.

Nota

Los valores duplicados de _id violan las restricciones de índice único, lo que provoca que el controlador devuelva un MongoWriteException de InsertOne() o un MongoBulkWriteException de InsertMany().

Para obtener más información sobre el campo _id, consulta la entrada del Manual del Servidor sobre Índices Únicos.

Para aprender más sobre la estructura y las reglas de los documentos, consultar la entrada del Manual del Servidor sobre Documentos.

El siguiente código muestra cómo utilizar el método asincrónico InsertOneAsync() o el método sincrónico InsertOne() para insertar un documento.

await _restaurantsCollection.InsertOneAsync(document);
_restaurantsCollection.InsertOne(document);

El siguiente código muestra cómo utilizar el método asincrónico InsertManyAsync() o el método sincrónico InsertMany() para insertar varios documentos.

await _restaurantsCollection.InsertManyAsync(docs);
_restaurantsCollection.InsertMany(docs);

Tip

Encuentra ejemplos ejecutables utilizando estos métodos en información adicional.

El método InsertOne() toma el documento que desea insertar como parámetro. El método InsertMany() acepta una colección IEnumerable de documentos, como una lista o un arreglo, como parámetro.

El método InsertOne() opcionalmente acepta un tipo InsertOneOptions como parámetro adicional, que representa opciones que se pueden utilizar para configurar la operación de inserción. Si no especifica ninguna propiedad de InsertOneOptions, el driver no personaliza la inserción.

El tipo InsertOneOptions le permite configurar opciones con las siguientes propiedades:

Propiedad
Descripción

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.

El método InsertMany() opcionalmente acepta un tipo InsertManyOptions como parámetro adicional, que tiene las propiedades BypassDocumentValidation y Comment anteriores y la propiedad adicional IsOrdered:

Propiedad
Descripción

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

El siguiente código utiliza el método InsertMany() para insertar cinco nuevos documentos Restaurant en una colección con BypassDocumentValidation establecido en true:

// Generates 5 new restaurants by using a helper method
var restaurants = GenerateDocuments();
// Creates an option object to bypass documentation validation on the documents
var options = new InsertManyOptions() { BypassDocumentValidation = true };
// Inserts the new documents into the restaurants collection with the specified options
_restaurantsCollection.InsertMany(restaurants, options);

El InsertMany() método no devuelve ningún valor. Puede verificar que sus documentos se hayan insertado correctamente ejecutando una Find() operación en la colección. Para ver un ejemplo de cómo encontrar un documento, consulte Buscar un documento.

Suponga que desea insertar los siguientes documentos:

{ "_id" : 1, "name" : "Restaurant A" }
{ "_id" : 2, "name" : "Restaurant B" }
{ "_id" : 1, "name" : "Restaurant C" }
{ "_id" : 3, "name" : "Restaurant D" }

Si intenta insertar estos documentos con el valor predeterminado InsertManyOptions, el controlador lanza un MongoBulkWriteException en el tercer documento debido al valor _id repetido, pero los documentos anteriores al documento que produce el error aún se insertan en su colección.

Si miras dentro de tu colección, deberías poder ver los siguientes documentos:

{ "_id" : 1, "name" : "Restaurant A" }
{ "_id" : 2, "name" : "Restaurant B" }

Si se configura IsOrdered en false en su operación de inserción, el driver continuará insertando sus documentos, incluso si algunos de ellos producen errores. Con este comportamiento de inserción modificado, el driver lanza una excepción pero inserta todos los documentos que no producen errores.

Si miras dentro de tu colección, deberías poder ver los siguientes documentos:

{ "_id" : 1, "name" : "Restaurant A" }
{ "_id" : 2, "name" : "Restaurant B" }
{ "_id" : 3, "name" : "Restaurant D" }

Para ejemplos ejecutables de las operaciones de inserción, consulte los siguientes ejemplos de uso:

Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consultar la siguiente documentación de la API:

Volver

Guardar

En esta página