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 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# 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 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.
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 la Conjuntos de datos de muestra proporcionados por Atlas. Consulte Introducción al controlador .NET/C# para aprender a crear un clúster gratuito de MongoDB y cargar estos datos de muestra.
El _id campo
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 |
|---|---|
| Gets or sets a value indicating whether to bypass document
validation. If true, allows the write to opt-out of
document level validation. |
| 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 |
|---|---|
| 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 |
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: