Overview
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 inserta uno o más documentos en una colección de MongoDB. El controlador .NET/C# ofrece los siguientes métodos para llevar a cabo operaciones de inserción, cada uno de los cuales tiene una versión sincrónica y asincrónica:
InsertOne() or ``InsertOneAsync()InsertMany()orInsertManyAsync()
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.
Datos de muestra
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; } [] 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; } }
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 los conjuntos de datos de muestra proporcionados por Atlas. Consulte Primeros pasos con el controlador .NET/C# para aprender a crear un clúster gratuito de MongoDB y cargar estos datos de muestra.
El campo _id
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
_idsea único.Puede permitir que el controlador genere automáticamente valores únicos de
ObjectIdpara cada documento_id. Si no configura manualmente un valor de campo_idpara un documento, el controlador rellenará el campo con unObjectId.
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.
Inserta un documento
El siguiente código muestra cómo usar el método síncrono InsertOne() o el método asíncrono InsertOneAsync() para insertar un documento.
_restaurantsCollection.InsertOne(document);
await _restaurantsCollection.InsertOneAsync(document);
Inserta varios documentos
El siguiente código muestra cómo usar el método síncrono InsertMany() o el método asíncrono InsertManyAsync() para insertar varios documentos.
_restaurantsCollection.InsertMany(docs);
await _restaurantsCollection.InsertManyAsync(docs);
Tip
Encuentra ejemplos ejecutables utilizando estos métodos en información adicional.
Modificar el comportamiento de inserción
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 |
|---|---|
| Obtiene o establece un valor que indica si se debe omitir la validación de documentos. Si |
| 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 |
|---|---|
| Obtiene o establece un valor que indica si las solicitudes se cumplen en orden. Si Por defecto: |
Ejemplo
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 devuelve ningún valor. Puede verificar que sus documentos se han insertado correctamente ejecutando una operación Find() en la colección. Para un ejemplo de cómo encontrar un documento, ver Recuperar datos.
Especificar el comportamiento ordenado
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 InsertManyOptions por defecto, el controlador lanza un MongoBulkWriteException en el tercer documento debido al valor _id repetido. La operación añade solo los dos primeros documentos a la colección:
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" }
Si se establece IsOrdered en false en la operación de inserción, el driver continuará insertando los documentos incluso si algunos documentos producen errores. Con este comportamiento de inserción modificado, el driver lanza una excepción, pero inserta todos los documentos que no generan errores:
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" } { "_id" : 3, "name" : "Restaurant D" }
Información Adicional
Para ejemplos ejecutables de las operaciones de inserción, consulte los siguientes ejemplos de uso:
Documentación de la API
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: