Overview
En esta guía, puedes aprender cómo insertar documentos en MongoDB.
Puedes usar MongoDB para recuperar, actualizar y borrar información que ya está almacenada en MongoDB. Para almacenar información, utiliza una operación de inserción.
Una operación de inserción introduce uno o más documentos en una colección de MongoDB. El controlador de Node.js proporciona los siguientes métodos para realizar operaciones de inserción:
insertOne()insertMany()bulkWrite()
Tip
Interactive Lab
Esta página incluye un breve laboratorio interactivo que demuestra cómo insertar datos utilizando el método insertOne(). 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.
Las siguientes secciones se centran en insertOne() y insertMany(). Para ver un ejemplo de cómo usar el método bulkWrite(), consulte Ejemplo de bulkWrite(): Sección de archivo completo de la guía de operaciones masivas.
Una nota acerca de _id
Al insertar un documento, MongoDB aplica una restricción en sus documentos por defecto. Cada documento debe contener un campo _id único.
Existen dos maneras de gestionar este campo:
El mismo usuario puede gestionar este campo y asegurarse de que cada valor que use sea único.
Puedes permitir que el controlador genere automáticamente valores únicos de
ObjectIdcon la fábrica de llave primaria.
A menos que hayas proporcionado garantías sólidas de singularidad, recomendamos que dejes que el controlador genere automáticamente valores de _id.
Nota
Los valores duplicados de _id infringen las restricciones de índice único, lo que resulta en un WriteError.
Para obtener más información sobre _id, consulte la entrada del manual del servidor en
Unique Indexes.
Inserta un solo documento
Utilice el método insertOne() cuando desee insertar un solo documento.
Tras una inserción exitosa, el método devuelve una instancia de InsertOneResult que representa el _id del nuevo documento.
Ejemplo
El siguiente ejemplo utiliza el método insertOne() para insertar un nuevo documento en la colección myDB.pizzaMenu:
const myDB = client.db("myDB"); const myColl = myDB.collection("pizzaMenu"); const doc = { name: "Neapolitan pizza", shape: "round" }; const result = await myColl.insertOne(doc); console.log( `A document was inserted with the _id: ${result.insertedId}`, );
El resultado se parece al siguiente texto:
A document was inserted with the _id: 60c79c0f4cc72b6bb31e3836
Para obtener más información sobre las clases y métodos mencionados en esta sección, consulta los siguientes recursos:
Documentación de la API en insertOne()
Documentación de la API sobre InsertOneResult
Entrada manual del servidor en insertOne()
Ejemplo de insertOne(): Archivo completo
Nota
Configuración de ejemplo
Este ejemplo se conecta a una instancia de MongoDB con un URI de conexión. Para obtener más información sobre cómo realizar la conexión a la instancia de MongoDB, se debe consultar la guía Conexión a MongoDB. Este ejemplo también usa la colección movies en la base de datos sample_mflix incluida en los conjuntos de datos de muestra de Atlas. Se pueden cargar en la base de datos en el nivel gratuito de MongoDB Atlas siguiendo la guía de Introducción a MongoDB.
El siguiente código es un archivo completo y autónomo que realiza una operación de inserción única:
1 import { MongoClient } from "mongodb"; 2 3 // Replace the uri string with your MongoDB deployment's connection string. 4 const uri = "<connection string uri>"; 5 6 // Create a new client and connect to MongoDB 7 const client = new MongoClient(uri); 8 9 async function run() { 10 try { 11 // Connect to the "sample_mflix" database and access its "movies" collection 12 const database = client.db("sample_mflix"); 13 const movies = database.collection("movies"); 14 15 // Create a document to insert 16 const doc = { 17 title: "Charade", 18 genres: ["Comedy", "Romance", "Thriller"], 19 year: 1963, 20 cast: ["Cary Grant", "Audrey Hepburn", "Walter Matthau"], 21 } 22 // Insert the defined document into the "movies" collection 23 const result = await movies.insertOne(doc); 24 25 // Print the ID of the inserted document 26 console.log(`A document was inserted with the _id: ${result.insertedId}`); 27 } finally { 28 // Close the MongoDB client connection 29 await client.close(); 30 } 31 } 32 // Run the function and handle any errors 33 run().catch(console.dir);
1 import { MongoClient } from "mongodb"; 2 3 // Replace the uri string with your MongoDB deployment's connection string. 4 const uri = "<connection string uri>"; 5 6 const client = new MongoClient(uri); 7 8 interface Movie { 9 title: string; 10 content: string[]; 11 year: number; 12 cast: string[]; 13 } 14 15 async function run() { 16 try { 17 const database = client.db("sample_mflix"); 18 // Specifying a Schema is optional, but it enables type hints on 19 // finds and inserts 20 const movies = database.collection<Movie>("movies"); 21 const result = await movies.insertOne({ 22 title: "Charade", 23 genres: ["Comedy", "Romance", "Thriller"], 24 year: 1963, 25 cast: ["Cary Grant", "Audrey Hepburn", "Walter Matthau"], 26 }); 27 console.log(`A document was inserted with the _id: ${result.insertedId}`); 28 } finally { 29 await client.close(); 30 } 31 } 32 run().catch(console.dir);
Al ejecutar el ejemplo anterior, se produce el siguiente resultado:
A document was inserted with the _id: ...
Inserta varios documentos
Utiliza el método insertMany() cuando desees insertar varios documentos. Este método inserta documentos en el orden especificado hasta que ocurra una excepción, si es que hay alguna.
Por ejemplo, suponga que desea insertar los siguientes documentos:
{ "_id": 1, "color": "red" } { "_id": 2, "color": "purple" } { "_id": 1, "color": "yellow" } { "_id": 3, "color": "blue" }
Si intentas insertar estos documentos, se produce un WriteError cuando se procesa el tercer documento, pero los documentos anteriores al error se insertan en la colección.
Nota
Utilice un bloque try-catch para obtener una confirmación de los documentos procesados con éxito antes de que ocurra el error:
const myDB = client.db("myDB"); const myColl = myDB.collection("colors"); try { const docs = [ { "_id": 1, "color": "red"}, { "_id": 2, "color": "purple"}, { "_id": 1, "color": "yellow"}, { "_id": 3, "color": "blue"} ]; const insertManyresult = await myColl.insertMany(docs); let ids = insertManyresult.insertedIds; console.log(`${insertManyresult.insertedCount} documents were inserted.`); for (let id of Object.values(ids)) { console.log(`Inserted a document with id ${id}`); } } catch(e) { console.log(`A MongoBulkWriteException occurred, but there are successfully processed documents.`); let ids = e.result.result.insertedIds; for (let id of Object.values(ids)) { console.log(`Processed a document with id ${id._id}`); } console.log(`Number of documents inserted: ${e.result.result.nInserted}`); }
El resultado consiste en documentos que MongoDB puede procesar y se asemeja a lo siguiente:
A MongoBulkWriteException occurred, but there are successfully processed documents. Processed a document with id 1 Processed a document with id 2 Processed a document with id 1 Processed a document with id 3 Number of documents inserted: 2
Si se mira dentro de la colección, se verán los siguientes documentos:
{ "_id": 1, "color": "red" } { "_id": 2, "color": "purple" }
Tras una inserción exitosa, el método devuelve una instancia de InsertManyResult que representa el número de documentos insertados y el _id del nuevo documento.
Ejemplo
El siguiente ejemplo utiliza el método insertMany() para insertar tres nuevos documentos en la colección myDB.pizzaMenu:
const myDB = client.db("myDB"); const myColl = myDB.collection("pizzaMenu"); const docs = [ { name: "Sicilian pizza", shape: "square" }, { name: "New York pizza", shape: "round" }, { name: "Grandma pizza", shape: "square" } ]; const insertManyresult = await myColl.insertMany(docs); let ids = insertManyresult.insertedIds; console.log(`${insertManyresult.insertedCount} documents were inserted.`); for (let id of Object.values(ids)) { console.log(`Inserted a document with id ${id}`); }
El resultado es similar a lo siguiente:
3 documents were inserted. Inserted a document with id 60ca09f4a40cf1d1afcd93a2 Inserted a document with id 60ca09f4a40cf1d1afcd93a3 Inserted a document with id 60ca09f4a40cf1d1afcd93a4
Para obtener más información sobre las clases y métodos mencionados en esta sección, consulta los siguientes recursos:
Documentación de la API sobre insertMany()
Documentación de la API sobre InsertManyResult
Documentación de la API en PkFactory
Entrada manual del servidor en insertMany()
insertMany() Ejemplo: archivo completo
Nota
Configuración de ejemplo
Este ejemplo se conecta a una instancia de MongoDB con un URI de conexión. Para obtener más información sobre cómo realizar la conexión a la instancia de MongoDB, se debe consultar la guía Conexión a MongoDB. Este ejemplo también usa la colección movies en la base de datos sample_mflix incluida en los conjuntos de datos de muestra de Atlas. Se pueden cargar en la base de datos en el nivel gratuito de MongoDB Atlas siguiendo la guía de Introducción a MongoDB.
El siguiente código es un archivo completo y autónomo que realiza una operación de inserción múltiple:
1 import { MongoClient } from "mongodb"; 2 3 // Replace the uri string with your MongoDB deployment's connection string. 4 const uri = "<connection string uri>"; 5 6 const client = new MongoClient(uri); 7 8 async function run() { 9 try { 10 11 // Get the database and collection on which to run the operation 12 const database = client.db("sample_mflix"); 13 const movies = database.collection("movies"); 14 15 // Create an array of documents to insert 16 const moviesToInsert = [ 17 { title: "Arsenic and Old Lace", genres: ["Comedy", "Romance"], year: 1944, cast: ["Cary Grant", "Priscilla Lane", "Raymond Massey"] }, 18 { title: "Ball of Fire", genres: ["Comedy", "Romance"], year: 1941, cast: ["Gary Cooper", "Barbara Stanwyck", "Oskar Homolka"] }, 19 { title: "I Married a Witch", genres: ["Comedy", "Fantasy", "Romance"], year: 1942, cast: ["Veronica Lake", "Fredric March", "Susan Hayward"] }, 20 ]; 21 22 // Prevent additional documents from being inserted if one fails 23 const options = { ordered: true }; 24 25 // Execute insert operation 26 const result = await movies.insertMany(moviesToInsert, options); 27 28 // Print result 29 console.log(`${result.insertedCount} documents were inserted`); 30 } finally { 31 await client.close(); 32 } 33 } 34 run().catch(console.dir);
1 import { MongoClient } from "mongodb"; 2 3 // Replace the uri string with your MongoDB deployment's connection string. 4 const uri = "<connection string uri>"; 5 6 const client = new MongoClient(uri); 7 8 interface Movie { 9 title: string; 10 genres: string[]; 11 year: number; 12 cast: string[]; 13 } 14 15 async function run() { 16 try { 17 const database = client.db("sample_mflix"); 18 // Specifying a schema is optional, but it enables type hints on 19 // finds and inserts 20 const movies = database.collection<Movie>("movies"); 21 22 const result = await movies.insertMany( 23 { title: "Arsenic and Old Lace", genres: ["Comedy", "Romance"], year: 1944, cast: ["Cary Grant", "Priscilla Lane", "Raymond Massey"] }, 24 { title: "Ball of Fire", genres: ["Comedy", "Romance"], year: 1941, cast: ["Gary Cooper", "Barbara Stanwyck", "Oskar Homolka"] }, 25 { title: "I Married a Witch", genres: ["Comedy", "Fantasy", "Romance"], year: 1942, cast: ["Veronica Lake", "Fredric March", "Susan Hayward"] }, 26 { ordered: true } 27 ); 28 console.log(`${result.insertedCount} documents were inserted`); 29 } finally { 30 await client.close(); 31 } 32 } 33 run().catch(console.dir);
Al ejecutar el ejemplo anterior, se produce el siguiente resultado:
3 documents were inserted
Documentación de la API
Para aprender más sobre cualquiera de los tipos o métodos discutidos en esta guía, consulta la siguiente documentación de la API: