Desarrollo de una aplicación de JavaScript con MongoDB en Azure

Para crear, mover o usar una base de datos de mongoDB en Azure, necesita un recurso de Cosmos DB. Aprenda a crear el recurso y usar la base de datos.

Creación y uso de una base de datos con extensión de VS Code

Cree un recurso de Cosmos en primer lugar, ya que tardará varios minutos.

  1. En Visual Studio Code, seleccione el icono de Azure en el menú de la izquierda y, a continuación, seleccione la sección Bases de datos.

    Si la sección Bases de datos no está visible, asegúrese de que ha seleccionado la sección en el menú ... en la parte superior de Azure.

    Captura de pantalla parcial del icono de contenedor remoto de Visual Studio Code.

  2. En la sección Bases de datos del explorador de Azure, seleccione su suscripción haciendo clic con el botón derecho y, después, seleccione Crear servidor.

  3. En la paleta de comandos Create new Azure Database Server (Crear nuevo servidor de base de datos de Azure), seleccione Azure Cosmos DB para la API de MongoDB.

  4. Siga las indicaciones que se indican en la tabla siguiente para comprender cómo se usan los valores. La base de datos puede tardar hasta 15 minutos en crearse.

    Propiedad Valor
    Escriba un nombre de cuenta único global para el nuevo recurso. Escriba un valor como, por ejemplo cosmos-mongodb-YOUR-NAME, para el recurso. Reemplace YOUR-NAME por su nombre o identificador único. Este nombre único también se usa como parte de la dirección URL para acceder al recurso en un explorador.
    Seleccione o cree un grupo de recursos. Cree un nuevo grupo de recursos denominado js-demo-mongodb-web-app-resource-group-YOUR-NAME-HERE.
    Location Ubicación del recurso. Para este tutorial, seleccione una ubicación regional cercana.

    El recurso puede tardar hasta 15 minutos en crearse. Puede pasar por alto la siguiente sección si tiene restricciones de tiempo, pero recuerde volver a finalizar la siguiente sección en unos minutos.

Adición de una regla de firewall para la dirección IP del cliente

Debe usar la CLI de Azure o Azure Portal para configurar una regla de firewall.

Obtención de la cadena de conexión de MongoDB para el recurso

  1. Seleccione el explorador de Azure en la barra de actividades.
  2. Seleccione Cosmos DB en la barra lateral.
  3. Haga clic con el botón derecho en la base de datos y seleccione Copy connection string (Copiar cadena de conexión).

Captura de pantalla parcial de VS Code que muestra la base de datos de Azure Cosmos DB en Azure Explorer.

Uso del emulador de Azure Cosmos DB para desarrollo local

Más información sobre el emulador de Azure Cosmos DB:

Uso de los paquetes nativos del SDK para conectarse a MongoDB en Azure

La base de datos mongoDB en Cosmos DB usa paquetes npm que ya están disponibles, como:

Instalación del SDK de MongoDB

Para conectarse y usar MongoDB en Azure Cosmos DB con JavaScript y MongoDB, use el procedimiento siguiente.

  1. Asegúrese de que Node.js y npm están instalados.

  2. Cree un proyecto de Node.js en una carpeta nueva:

    mkdir DataDemo && \
        cd DataDemo && \
        npm init -y && \
        npm install mongodb &&
        code .
    

    Este comando:

    • crea una carpeta de proyecto llamada DataDemo.
    • cambia el terminal de Bash a esa carpeta.
    • inicializa el proyecto, lo que crea el archivo package.json.
    • instala el SDK.
    • abre el proyecto en Visual Studio Code.

Creación de un archivo de JavaScript para insertar datos de forma masiva en la base de datos de MongoDB

  1. En Visual Studio Code, cree un archivo bulk_insert.js.

  2. Descargue el MOCK_DATA.csv y colóctelo en el mismo directorio que .

  3. Copie el siguiente código JavaScript en el archivo bulk_insert.js:

    const { MongoClient } = require('mongodb');
    const ObjectId = require('mongodb').ObjectID;
    require('dotenv').config();
    
    const fs = require('fs');
    const parse = require('csv-parser')
    const { finished } = require('stream/promises');
    
    const DATABASE_URL = process.env.YOUR_RESOURCE_PRIMARY_CONNECTION_STRING
        ? process.env.YOUR_RESOURCE_PRIMARY_CONNECTION_STRING
        : 'mongodb://localhost:27017';
    const DATABASE_NAME = process.env.DATABASE_NAME || 'my-tutorial-db';
    const DATABASE_COLLECTION_NAME =
        process.env.DATABASE_COLLECTION_NAME || 'my-collection';
    
    const csvFile = './books.csv'    
        
    let mongoConnection = null;
    let db = null;
    let collection = null;
    
    
    // insert each row into MongoDB
    const insertData = async (readable) =>{
        
        let i = 0;
        
        for await (const row of readable) {
            console.log(`${i++} = ${JSON.stringify(row.goodreads_book_id)}`);
            await collection.insertOne(row);
        }
    }
    const bulkInsert = async () => {
        
        mongoConnection = await MongoClient.connect(DATABASE_URL, { useUnifiedTopology: true });
        db = mongoConnection.db(DATABASE_NAME);
        collection = await db.collection(DATABASE_COLLECTION_NAME);
        
        // read file, parse CSV, each row is a chunk
        const readable = fs
        .createReadStream(csvFile)
        .pipe(parse());
    
        // Pipe rows to insert function
        await insertData(readable)
        await mongoConnection.close();
    }
    
    bulkInsert().then(() => {
        console.log('done');
    
    }).catch(err => {
        console.log(`done +  failed ${err}`)
    })
    
  4. Reemplace el siguiente contenido del script por la información de su recurso:

    • YOUR_RESOURCE_PRIMARY_CONNECTION_STRING
  5. Ejecute el script.

    node bulk_insert.js
    

Creación de código JavaScript para usar MongoDB

  1. En Visual Studio Code, cree un archivo index.js.

  2. Copie el siguiente código JavaScript en el archivo index.js:

    const { MongoClient } = require('mongodb');
    const ObjectId = require('mongodb').ObjectID;
    
    // read .env file
    require('dotenv').config();
    
    /* eslint no-return-await: 0 */
    
    const DATABASE_URL = process.env."YOUR_RESOURCE_PRIMARY_CONNECTION_STRING"
        ? process.env."YOUR_RESOURCE_PRIMARY_CONNECTION_STRING"
        : 'mongodb://localhost:27017';
    const DATABASE_NAME = process.env.DATABASE_NAME || 'my-tutorial-db';
    const DATABASE_COLLECTION_NAME =
        process.env.DATABASE_COLLECTION_NAME || 'my-collection';
    
    let mongoConnection = null;
    let db = null;
    
    const insertDocuments = async (
        documents = [{ a: 1 }, { a: 2 }, { a: 3 }]
    ) => {
        // check params
        if (!db || !documents)
            throw Error('insertDocuments::missing required params');
    
        // Get the collection
        const collection = await db.collection(DATABASE_COLLECTION_NAME);
    
        // Insert some documents
        return await collection.insertMany(documents);
    };
    const findDocuments = async (
        query = { a: 3 }
    ) => {
        
        // check params
        if (!db)
            throw Error('findDocuments::missing required params');
    
        // Get the collection
        const collection = await db.collection(DATABASE_COLLECTION_NAME );
    
        // find documents
        return await collection.find(query).toArray();
    };
    
    const removeDocuments = async (
        docFilter = {}
    ) => {
        
        // check params
        if (!db )
            throw Error('removeDocuments::missing required params');
    
        // Get the documents collection
        const collection = await db.collection(DATABASE_COLLECTION_NAME);
    
        // Delete document
        return await collection.deleteMany(docFilter);
    };
    
    const connect = async (url) => {
        
        // check params
        if (!url) throw Error('connect::missing required params');
    
        return MongoClient.connect(url, { useUnifiedTopology: true });
    };
    /* 
    eslint consistent-return: [0, { "treatUndefinedAsUnspecified": false }]
    */
    const connectToDatabase = async () => {
        try {
            if (!DATABASE_URL || !DATABASE_NAME) {
                console.log('DB required params are missing');
                console.log(`DB required params DATABASE_URL = ${DATABASE_URL}`);
                console.log(`DB required params DATABASE_NAME = ${DATABASE_NAME}`);
            }
    
            mongoConnection = await connect(DATABASE_URL);
            db = mongoConnection.db(DATABASE_NAME);
    
            console.log(`DB connected = ${!!db}`);
            
            return !!db;
    
        } catch (err) {
            console.log('DB not connected - err');
            console.log(err);
        }
    };
    module.exports = {
        insertDocuments,
        findDocuments,
        removeDocuments,
        ObjectId,
        connectToDatabase
    };
    
  3. Reemplace el siguiente contenido del script por la información de su recurso:

    • YOUR_RESOURCE_PRIMARY_CONNECTION_STRING
  4. Ejecute el script.

    node index.js
    

Pasos siguientes