Поделиться через


Быстрый старт: использование Azure Cosmos DB для NoSQL с Azure SDK для Node.js

В этом кратком руководстве описано, как развернуть базовое приложение Azure Cosmos DB для NoSQL с помощью пакета SDK Azure для Node.js. Azure Cosmos DB для NoSQL — это хранилище данных без схемы, позволяющее приложениям хранить неструктурированные данные в облаке. Запросите данные в ваших контейнерах и выполняйте обычные операции с отдельными элементами, используя Azure SDK для Node.js.

Справочная документация по API | Исходный код библиотеки | Пакет (npm) | Azure Developer CLI

Предпосылки

  • Azure Developer CLI (Интерфейс командной строки для разработчиков Azure)
  • Docker Desktop
  • Node.js 22 или более поздней версии

Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.

Инициализируйте проект

Используйте интерфейс командной строки разработчика Azure (azd) для создания учетной записи Azure Cosmos DB для NoSQL и развертывания контейнерного примера приложения. Пример приложения использует клиентскую библиотеку для управления, создания, чтения и выполнения запросов к образцам данных.

  1. Откройте терминал в пустом каталоге.

  2. Если вы еще не прошли проверку подлинности, выполните проверку подлинности в интерфейсе командной строки разработчика Azure с помощью azd auth login. Следуйте инструкциям, указанным инструментом, чтобы выполнить аутентификацию в CLI, используя ваши предпочитаемые учетные данные Azure.

    azd auth login
    
  3. Используйте azd init для инициализации проекта.

    azd init --template cosmos-db-nosql-nodejs-quickstart
    
  4. Во время инициализации настройте уникальное имя среды.

  5. Разверните учетную запись Azure Cosmos DB с помощью azd up. Шаблоны Bicep также развертывают образец веб-приложения.

    azd up
    
  6. В процессе подготовки выберите вашу подписку, желаемое местоположение и целевую группу ресурсов. Дождитесь завершения процесса настройки. Процесс может занять около пяти минут.

  7. После завершения подготовки ресурсов Azure в выходные данные будет включен URL-адрес работающего веб-приложения.

    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. Используйте URL-адрес консоли для перехода к веб-приложению в браузере. Просмотрите выходные данные запущенного приложения.

Снимок экрана: работающее веб-приложение.

Снимок экрана: работающее веб-приложение.

Установка клиентской библиотеки

Клиентская библиотека доступна через менеджер пакетов Node в виде пакета @azure/cosmos.

  1. Откройте терминал и перейдите в папку /src .

    cd ./src
    
  2. Если @azure/cosmos еще не установлен, установите пакет с помощью npm install.

    npm install --save @azure/cosmos
    
  3. Кроме того, установите пакет @azure/identity, если он еще не установлен.

    npm install --save @azure/identity
    
  4. Откройте и просмотрите файл src/package.json, чтобы убедиться, что существуют записи azure-cosmos и azure-identity.

Импорт библиотек

Импортируйте типы DefaultAzureCredential и CosmosClient в код вашего приложения.

import { DefaultAzureCredential } from '@azure/identity';
import { CosmosClient } from '@azure/cosmos';

Импортируйте все необходимые типы в код приложения.

import { PagedAsyncIterableIterator } from '@azure/core-paging';
import { DefaultAzureCredential, TokenCredential } from '@azure/identity';
import { Container, CosmosClient, Database, FeedResponse, ItemResponse, SqlQuerySpec } from '@azure/cosmos';

Объектная модель

Имя Description
CosmosClient Этот класс является основным клиентским классом и используется для управления метаданными или базами данных на уровне учетной записи.
Database Этот класс представляет базу данных в учетной записи.
Container Этот класс в первую очередь используется для выполнения операций чтения, обновления и удаления как для контейнера, так и для элементов, находящихся внутри него.
PartitionKey Этот класс представляет логический ключ раздела. Этот класс необходим для многих распространенных операций и запросов.
SqlQuerySpec Этот интерфейс представляет SQL-запрос и все параметры запроса.

Примеры кода

Образец кода в шаблоне использует базу данных с именем cosmicworks и контейнер с именем products. Контейнер products содержит информацию о каждом продукте, такую как название, категория, количество, уникальный идентификатор и флаг распродажи. Контейнер использует свойство /category в качестве логического ключа раздела.

аутентификация клиента;

Данный пример создаёт новый экземпляр типа CosmosClient и выполняет аутентификацию с использованием экземпляра DefaultAzureCredential.

const credential = new DefaultAzureCredential();

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

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

Получение базы данных

Используйте client.database для извлечения существующей базы данных с именем cosmicworks.

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

Возьмите контейнер

Получение существующего products контейнера с помощью database.container.

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

Создать элемент

Создайте новый объект с всеми элементами, которые вы хотите сериализовать в JSON. В этом примере тип имеет уникальный идентификатор и поля для категории, названия, количества, цены и продажи. Создайте элемент в контейнере, используя container.items.upsert. Этот метод "вставляет или обновляет" элемент, фактически заменяя элемент, если он уже существует.

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);

Прочитайте предмет

Выполните операцию точечного чтения с помощью полей уникального идентификатора (id) и ключа раздела. Используйте container.item для получения указателя на элемент и item.read, чтобы эффективно извлечь конкретный элемент.

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!;

Элементы запроса

Выполнение запроса по нескольким элементам в контейнере с помощью container.items.query. Найдите все элементы в указанной категории с помощью этого параметризованного запроса:

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

Получение всех результатов запроса с помощью query.fetchAll. Прокрутите результаты запроса.

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
}

Изучите свои данные

Используйте расширение Visual Studio Code для Azure Cosmos DB для изучения данных NoSQL. Вы можете выполнять основные операции с базой данных, включая, но не ограничиваясь:

  • Выполнение запросов с помощью книги заметок или редактора запросов
  • Изменение, обновление, создание и удаление элементов
  • Импорт массовых данных из других источников
  • Управление базами данных и контейнерами

Дополнительные сведения см. в разделе Как использовать расширение Visual Studio Code для работы с Azure Cosmos DB для данных NoSQL.

Очистите ресурсы

Когда вы больше не нуждаетесь в демонстрационном приложении или ресурсах, удалите соответствующее развертывание и все ресурсы.

azd down