Inicio rápido: Uso de Azure Cosmos DB for NoSQL con Azure SDK para Node.js

En este inicio rápido, implementará una aplicación básica de Azure Cosmos DB for Table mediante Azure SDK para Node.js. Azure Cosmos DB for Table es un almacén de datos sin esquema que permite a las aplicaciones almacenar datos de tabla estructurados en la nube. Aprenderá a crear tablas, filas y realizar tareas básicas en el recurso de Azure Cosmos DB mediante el SDK de Azure para Node.js.

Documentación de referencia de la API | Código fuente de la biblioteca | Paquete (npm) | Azure Developer CLI

Requisitos previos

  • CLI de desarrollo de Azure
  • Docker Desktop
  • Node.js 22 o posteriores

Antes de comenzar, si no tiene una cuenta de Azure, cree una gratuita.

Inicialización del proyecto

Use Azure Developer CLI (azd) para crear una cuenta de Azure Cosmos DB for Table e implementar una aplicación de ejemplo contenedorizada. La aplicación de ejemplo usa la biblioteca cliente para administrar, crear, leer y consultar datos de ejemplo.

  1. Abra un terminal en un directorio vacío.

  2. Si aún no está autenticado, autentíquese en Azure Developer CLI mediante azd auth login. Siga los pasos especificados por la herramienta para autenticarse en la CLI mediante sus credenciales de Azure preferidas.

    azd auth login
    
  3. Ejecute azd init para inicializar el proyecto.

    azd init --template cosmos-db-nosql-nodejs-quickstart
    
  4. Durante la inicialización, configure un nombre de entorno único.

  5. Implemente la cuenta de Azure Cosmos DB mediante azd up. Las plantillas de Bicep también implementan una aplicación web de muestra.

    azd up
    
  6. Durante el proceso de aprovisionamiento, seleccione la suscripción, la ubicación deseada y el grupo de recursos de destino. Espere a que se complete el proceso de aprovisionamiento. El proceso puede tardar aproximadamente cinco minutos.

  7. Una vez realizado el aprovisionamiento de los recursos de Azure, se incluye una dirección URL a la aplicación web en ejecución en la salida.

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. Use la dirección URL de la consola para ir a la aplicación web en el explorador. Observe la salida de la aplicación en ejecución.

Captura de pantalla de la aplicación web en ejecución.

Captura de pantalla de la aplicación web en ejecución.

Instalación de la biblioteca cliente

La biblioteca cliente está disponible a través del Administrador de paquetes de Node, como paquete @azure/cosmos.

  1. Abra un terminal y vaya a la carpeta /src.

    cd ./src
    
  2. Si aún no está instalado, instale el paquete @azure/cosmos mediante npm install.

    npm install --save @azure/cosmos
    
  3. Además, instale el paquete @azure/identity si aún no está instalado.

    npm install --save @azure/identity
    
  4. Abra y revise el archivo src/package.json para validar que existen las entradas azure-cosmos y azure-identity.

Modelo de objetos

Nombre Descripción
CosmosClient Esta clase es la clase de cliente principal y se usa para administrar bases de datos o metadatos de toda la cuenta.
Database Esta clase representa una base de datos dentro de la cuenta.
Container Esta clase se usa principalmente para realizar operaciones de lectura, actualización y eliminación en el contenedor o en los elementos almacenados en el contenedor.
PartitionKey Esta clase representa una clave de partición lógica. Esta clase es necesaria para muchas operaciones y consultas comunes.
SqlQuerySpec Esta interfaz representa una consulta SQL y cualquier parámetro de consulta.

Ejemplos de código

El código de ejemplo de la plantilla usa una base de datos denominada cosmicworks y un contenedor denominado products. El contenedor products contiene detalles como el nombre, la categoría, la cantidad, un identificador único y una marca de venta para cada producto. El contenedor usa la propiedad /category como clave de partición lógica.

Autenticar el cliente

En este ejemplo se crea una nueva instancia del tipo CosmosClient y se autentica mediante una instancia de DefaultAzureCredential.

const credential = new DefaultAzureCredential();

const client = new CosmosClient({
    '<azure-cosmos-db-nosql-account-endpoint>',
    aadCredentials: credential
});
const credential: TokenCredential = new DefaultAzureCredential();

const client = new CosmosClient({
    '<azure-cosmos-db-nosql-account-endpoint>',
    aadCredentials: credential
});

Obtención de una base de datos

Use client.database para recuperar la base de datos existente denominada cosmicworks.

const database = client.database('cosmicworks');
const database: Database = client.database('cosmicworks');

Obtención de un contenedor

Recupere el contenedor existente products mediante database.container.

const container = database.container('products');
const container: Container = database.container('products');

Crear un elemento

Compile un nuevo objeto con todos los miembros que desea serializar en JSON. En este ejemplo, el tipo tiene un identificador único y campos para categoría, nombre, cantidad, precio y venta. Cree un elemento en el contenedor mediante container.items.upsert. Este método "actualiza" eficazmente el elemento si ya existe.

const item = {
    'id': 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb',
    'category': 'gear-surf-surfboards',
    'name': 'Yamba Surfboard',
    'quantity': 12,
    'price': 850.00,
    'clearance': false
};

let response = await container.items.upsert(item);
const item: Product = {
    'id': 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb',
    'category': 'gear-surf-surfboards',
    'name': 'Yamba Surfboard',
    'quantity': 12,
    'price': 850.00,
    'clearance': false
};

let response: ItemResponse<Product> = await container.items.upsert<Product>(item);

Lectura de un elemento

Se puede realizar una operación de lectura de punto mediante el identificador único (id) y los campos de clave de partición. Use container.item para obtener un puntero a un elemento y item.read para recuperar eficazmente el elemento específico.

const id = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb';
const partitionKey = 'gear-surf-surfboards';

let response = await container.item(id, partitionKey).read();
let read_item = response.resource;
const id = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb';
const partitionKey = 'gear-surf-surfboards';

let response: ItemResponse<Product> = await container.item(id, partitionKey).read<Product>();
let read_item: Product = response.resource!;

Elementos de consulta

Realice una consulta en varios elementos de un contenedor mediante container.items.query. Busque todos los elementos de una categoría especificada mediante esta consulta con parámetros:

SELECT * FROM products p WHERE p.category = @category

Capture todos los resultados de la consulta mediante query.fetchAll. Recorra los resultados de la consulta.

const querySpec = {
    query: 'SELECT * FROM products p WHERE p.category = @category',
    parameters: [
        {
            name: '@category',
            value: 'gear-surf-surfboards'
        }
    ]
};

let response = await container.items.query(querySpec).fetchAll();
for (let item of response.resources) {
    // Do something
}
const querySpec: SqlQuerySpec = {
    query: 'SELECT * FROM products p WHERE p.category = @category',
    parameters: [
        {
            name: '@category',
            value: 'gear-surf-surfboards'
        }
    ]
};

let response: FeedResponse<Product> = await container.items.query<Product>(querySpec).fetchAll();
for (let item of response.resources) {
    // Do something
}

Limpieza de recursos

Cuando ya no necesite la aplicación o los recursos de ejemplo, quite la implementación correspondiente y todos los recursos.

azd down