El controlador nativo MongoDB para Node.JS es una dependencia que permite que nuestra aplicación JavaScript interactúe con la base de datos NoSQL, ya sea localmente o en la nube a través de MongoDB Atlas. Se nos permite usar promesas y devoluciones de llamadas que nos brindan una mayor flexibilidad en el uso de las funciones de ES6.
Para comenzar a trabajar con el controlador MongoDB, primero crearemos una nueva carpeta e inicializaremos nuestro proyecto:
npm init -y
Aquí, -y es un indicador que inicializará nuestro proyecto con valores predeterminados.
Instalaremos el controlador MongoDB y lo guardaremos como dependencia con el siguiente comando:
npm install mongodb --save
En nuestro archivo de punto de entrada de JavaScript, por conveniencia, nombraremos app.js y escribiremos el siguiente código para conectarnos al servidor:
JavaScript
// Importing MongoClient from mongodb driver const { MongoClient } = require('mongodb'); // Connecting to a local port const uri = 'mongodb://127.0.0.1:27017'; const client = new MongoClient(uri, { useUnifiedTopology: true, useNewUrlParser: true }); connect(); // ESNext syntax using async-await async function connect() { try { await client.connect(); const db = client.db('cars'); console.log( `Successfully connected to db ${db.databaseName}`); } catch (err) { console.error(`we encountered ${err}`); } finally { client.close(); } }
Producción:
Successfully connected to db cars
Ahora que hemos hecho la conexión, veamos algunas operaciones básicas de inserción, lectura, actualización y eliminación en nuestra base de datos:
Inserción y lectura: en el siguiente fragmento de código vamos a tratar con la operación de inserción y lectura.
JavaScript
const { MongoClient } = require('mongodb'); const uri = 'mongodb://127.0.0.1:27017'; const client = new MongoClient(uri, { useUnifiedTopology: true, useNewUrlParser: true }); connect(); async function connect() { try { await client.connect(); const db = client.db('cars'); console.log( `Successfully connected to db ${db.databaseName}`); const sportsCars = db.collection('SportsCars'); // Insertion const cursorInsertion = await sportsCars.insertMany([ { 'company': 'mercedes', 'series': 'Black Series', 'model': 'SLS AMG' }, { 'company': 'Audi', 'series': 'A series', 'model': 'A8' }]); console.log(cursorInsertion.insertedCount); // Display const cursorFind = sportsCars.find(); const data = await cursorFind.toArray(); console.table(data); } catch (err) { console.error(`we encountered ${err}`); } finally { client.close(); } }
Explicación: Se crea una colección llamada autos deportivos usando el método collections(). Para la inserción, utilizamos los dos métodos siguientes:
- Método insertMany(): este método se utiliza para insertar más de una entrada en la base de datos con la ayuda de los cursores. En este caso, toma una array de objetos como parámetros. El método devuelve una promesa, por lo que usamos la palabra clave await. Alternativamente, el método insertOne() se usa para insertar un solo documento en la tabla.
- InsertedCount: esta función se utiliza para contar el número de inserciones que se realizaron.
Para la visualización utilizamos los siguientes métodos:
- find(): este método se utiliza para encontrar todos los documentos en la base de datos con la ayuda de los cursores.
- toArray(): este método utiliza el elemento de cursor recibido del método find() para almacenar la base de datos en una array de objetos. Este método devuelve una promesa, por lo que hemos utilizado la palabra clave await.
La salida del fragmento es la siguiente:
Actualización: el siguiente fragmento de código nos ayudará a actualizar un elemento de la base de datos y luego mostraremos la base de datos actualizada:
JavaScript
const { MongoClient } = require('mongodb'); const uri = 'mongodb://127.0.0.1:27017'; const client = new MongoClient(uri, { useUnifiedTopology: true, useNewUrlParser: true }); connect(); async function connect() { try { await client.connect(); const db = client.db('cars'); const sportsCars = db.collection('SportsCars'); //update const cursorUpdate = await sportsCars.updateOne( { "company": "mercedes" }, { "$set": { "status": "sold" } } ); console.log(cursorUpdate.modifiedCount); // Display const cursorFind = sportsCars.find(); const data = await cursorFind.toArray(); console.table(data); } catch (err) { console.error(`we encountered ${err}`); } finally { client.close(); } }
Explicación: Usamos los siguientes métodos para actualizar la base de datos:
- Método updateOne(): este método nos permite actualizar una entrada. El primer argumento que toma es un par clave-valor correspondiente a la entrada de la base de datos que queremos actualizar. Puede ser cualquiera de las propiedades que posee el elemento. El segundo argumento es un comando de actualización $set, que se empareja con un objeto. El objeto es nuevamente un par clave-valor de una propiedad existente o nueva. Si la propiedad ya existe, se actualiza con el valor pasado. Si no existe, entonces se agrega. Este método devuelve una promesa, por lo que usamos la palabra clave await. Alternativamente, el método updateMany() se puede usar para actualizar varios documentos.
- modifiedCount: este método se llama en el elemento cursor recibido del método anterior y nos da un recuento del número de entradas actualizadas.
Producción:
Eliminación de una entrada: en el siguiente fragmento, eliminaremos una entrada según la serie:
JavaScript
const { MongoClient } = require('mongodb'); const uri = 'mongodb://127.0.0.1:27017'; const client = new MongoClient(uri, { useUnifiedTopology: true, useNewUrlParser: true }); connect(); async function connect() { try { await client.connect(); const db = client.db('cars'); const sportsCars = db.collection('SportsCars'); //Delete const cursorDelete = await sportsCars .deleteOne({ "series": "A series" }); console.log(cursorDelete.deletedCount); // Display const cursorFind = sportsCars.find(); const data = await cursorFind.toArray(); console.table(data); } catch (err) { console.error(`we encountered ${err}`); } finally { client.close(); } }
Explicación: Utilizamos los siguientes métodos para eliminar la entrada «empresa»: «Audi» de la base de datos:
- deleteOne: este método se utiliza para eliminar una entrada de la base de datos. Toma un par clave-valor que corresponde a la entrada que queremos eliminar. Este método devuelve una promesa. Por lo tanto, usamos la palabra clave esperar. Alternativamente, el método deleteMany() se puede usar para eliminar varios documentos a la vez.
- deleteCount: Este método se llama sobre el elemento cursor recibido del método anterior y devuelve el número de eliminaciones que se han realizado.
Producción:
Por lo tanto, Node y MongoDB se pueden usar fácilmente para hacer API CRUD de back-end eficientes.
Publicación traducida automáticamente
Artículo escrito por tirtharajsengupta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA