Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

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 el documento es mayor de 16 MB, se debe usar la API GridFS en el lugar.

Una operación de inserción agrega uno o más documentos a una colección de MongoDB. El Driver .NET/C# proporciona los siguientes métodos para realizar operaciones de inserción, cada uno de los cuales tiene una versión asincrónica y sincrónica:

  • 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 botón Open Interactive Tutorial en la parte superior de la página. Para ampliar el laboratorio a un formato de 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 proviene de los conjuntos de datos de muestra proporcionados por Atlas. Consulta la Guía de inicio rápido para aprender a crear un clúster gratuito de MongoDB y cargar estos datos de ejemplo.

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 asíncrono InsertManyAsync() o el método síncrono 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

Obtiene o establece un valor que indica si se debe omitir la validación de documentos. Si true, permite la opción de no participar en la validación a nivel de documento.

Comment

Obtiene o establece el comentario para la operación. Consulte los campos del comando de inserción para obtener más información.

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

Obtiene o establece un valor que indica si las solicitudes se cumplen en orden. Si true, el controlador envía los documentos al servidor en el orden proporcionado. Si ocurre un error, el controlador y el servidor abortan todas las operaciones de inserción restantes. Para obtener más información, consulte Comportamiento ordenado.

Por defecto: 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 método InsertMany() no tiene valor de retorno. Puedes verificar que tus documentos se insertaron correctamente realizando una operación Find() en la colección. Para un ejemplo de cómo encontrar un documento, consulta Cómo encontrar 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 se intenta insertar estos documentos con InsertManyOptions por defecto, el driver lanza una MongoBulkWriteException en el tercer documento debido al valor _id repetido, pero los documentos anteriores al que produce el error siguen insertándose en la 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: