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


Краткое руководство: Использование Azure DocumentDB с драйвером MongoDB для Node.js

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

Справочник по API | Исходный код | Пакет (npm)

Предпосылки

  • Node.js 22 или более поздней версии

Создание кластера Azure DocumentDB

Чтобы приступить к работе, сначала необходимо создать кластер Azure DocumentDB, который служит основой для хранения данных NoSQL и управления ими.

  1. Войдите на портал Azure (https://portal.azure.com).

  2. В меню портала Azure или на главной странице выберите Создать ресурс.

  3. На новой странице найдите и выберите Azure DocumentDB.

    Снимок экрана: поиск Azure DocumentDB.

  4. На странице Создание кластера Azure DocumentDB и в разделе Основы выберите параметр Настройка в разделе Уровень кластера.

    Снимок экрана: параметр

  5. На странице масштабирования настройте эти параметры и нажмите кнопку "Сохранить ", чтобы сохранить изменения на уровне кластера.

    Ценность
    Уровень кластера M30 tier, 2 vCore, 8-GiB RAM
    Хранилище на сегмент 128 GiB

    Снимок экрана: параметры конфигурации для вычислений и хранилища для нового кластера Azure DocumentDB.

  6. В разделе "Основные сведения" настройте следующие параметры:

    Ценность
    Subscription Выберите подписку Azure.
    Группа ресурсов Создание новой группы ресурсов или выбор существующей группы ресурсов
    Имя кластера Укажите глобально уникальное имя
    Местоположение Выбор поддерживаемого региона Azure для подписки
    Версия MongoDB Выберите 8.0
    Имя администратора Создание имени пользователя для доступа к кластеру в качестве администратора пользователя
    Пароль Использование уникального пароля, связанного с именем пользователя

    Снимок экрана: параметры кластера.

    Подсказка

    Запишите значения, используемые для имени пользователя и пароля. Эти значения используются далее в этом руководстве. Дополнительные сведения о допустимых значениях см. в разделе об ограничениях кластера.

  7. Выберите Next: Networking.

  8. В разделе правил брандмауэра на вкладке "Сеть" настройте следующие параметры:

    Ценность
    Метод подключения Public access
    Разрешить общедоступный доступ из служб и ресурсов в Azure к этому кластеру Enabled
  9. Добавьте правило брандмауэра для текущего клиентского устройства, чтобы предоставить доступ к кластеру, нажав кнопку +Добавить текущий IP-адрес клиента.

    Снимок экрана: конфигурации сети.

    Подсказка

    Во многих корпоративных средах IP-адреса компьютера разработчика скрыты из-за VPN или других параметров корпоративной сети. В этих случаях можно временно разрешить доступ ко всем IP-адресам, добавив 0.0.0.0 - 255.255.255.255 диапазон IP-адресов в качестве правила брандмауэра. Используйте это правило брандмауэра только временно в рамках тестирования и разработки подключений.

  10. Выберите Review + create.

  11. Проверьте настройки, которые вы указали, и затем выберите Создать. Создание кластера занимает несколько минут. Дождитесь завершения развертывания ресурсов.

  12. Наконец, выберите "Перейти к ресурсу" , чтобы перейти к кластеру Azure DocumentDB на портале.

Снимок экрана: параметры ресурса goto.

Получение учетных данных кластера

Получите учетные данные, используемые для подключения к кластеру.

  1. На странице кластера выберите параметр "Строки подключения " в меню ресурсов.

  2. В разделе "Строки подключения" скопируйте или запишите значение из поля строки подключения .

Снимок экрана: опция строк подключения.

Это важно

Строка подключения на портале не включает значение пароля. Вы должны заменить плейсхолдер <password> на учетные данные, введенные при создании кластера, или ввести пароль в интерактивном режиме.

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

Создайте проект Node.js в текущем каталоге.

  1. Начните в пустом каталоге.

  2. Откройте терминал в текущем каталоге.

  3. Инициализация проекта Node.js.

    npm init -y
    
  4. Установите TypeScript, инициализируйте конфигурацию TypeScript (необязательно для поддержки TypeScript).

    npm install -D typescript @types/node
    npx tsc --init
    

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

Клиентская библиотека доступна через npm в виде mongodb пакета.

  1. Установите драйвер Node.js MongoDB с помощью npm.

    npm install mongodb
    
  2. Откройте и просмотрите файлpackage.json , чтобы убедиться, что запись пакета существует.

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

    import { MongoClient, Db, Collection, Document } from 'mongodb';
    
    const { MongoClient } = require('mongodb');
    

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

Имя Description
MongoClient Тип, используемый для подключения к MongoDB.
Db Представляет базу данных в кластере.
Collection<Document> Представляет коллекцию в базе данных в кластере.

Примеры кода

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

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

Сначала подключитесь к клиенту с помощью базовой строки подключения.

  1. Создайте основную функцию и настройте строку подключения. Замените <your-cluster-name>и <your-username><your-password> фактическими сведениями о кластере.

    async function main(): Promise<void> {
        // Connection string for Azure DocumentDB cluster
        const connectionString = "mongodb+srv://<your-username>:<your-password>@<your-cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000";
    
        // Create a new client and connect to the server
        const client = new MongoClient(connectionString);
    
    async function main() {
        // Connection string for Azure DocumentDB cluster
        const connectionString = "mongodb+srv://<your-username>:<your-password>@<your-cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000";
    
        // Create a new client and connect to the server
        const client = new MongoClient(connectionString);
    
  2. Подключитесь к клиенту MongoDB и проверьте подключение.

        try {
            // Connect to the MongoDB cluster
            await client.connect();
    
            // Ping the server to verify connection
            await client.db("admin").command({ ping: 1 });
            console.log("Successfully connected and pinged Azure DocumentDB");
    
        try {
            // Connect to the MongoDB cluster
            await client.connect();
    
            // Ping the server to verify connection
            await client.db("admin").command({ ping: 1 });
            console.log("Successfully connected and pinged Azure DocumentDB");
    

Получите коллекцию

Теперь получите базу данных и коллекцию. Если база данных и коллекция еще не существуют, используйте драйвер для автоматического создания.

  1. Получите ссылку на базу данных.

            // Get database reference
            const database: Db = client.db("adventureworks");
            console.log(`Connected to database: ${database.databaseName}`);
    
            // Get database reference
            const database = client.db("adventureworks");
            console.log(`Connected to database: ${database.databaseName}`);
    
  2. Получите ссылку на коллекцию в базе данных.

            // Get collection reference
            const collection: Collection<Document> = database.collection("products");
            console.log("Connected to collection: products");
    
            // Get collection reference
            const collection = database.collection("products");
            console.log("Connected to collection: products");
    

Создание документа

Затем создайте несколько новых документов в коллекции. Добавление или обновление документов, чтобы гарантировать замену существующих документов при совпадении уникальных идентификаторов.

  1. Создание примеров документов продукта.

            // Create sample products
            interface Product {
                _id: string;
                name: string;
                category: string;
                quantity: number;
                price: number;
                sale: boolean;
            }
    
            const products: Product[] = [
                {
                    _id: "00000000-0000-0000-0000-000000004018",
                    name: "Windry Mittens",
                    category: "apparel-accessories-gloves-and-mittens",
                    quantity: 121,
                    price: 35.00,
                    sale: false,
                },
                {
                    _id: "00000000-0000-0000-0000-000000004318",
                    name: "Niborio Tent",
                    category: "gear-camp-tents",
                    quantity: 140,
                    price: 420.00,
                    sale: true,
                }
            ];
    
            // Create sample products
            const products = [
                {
                    _id: "00000000-0000-0000-0000-000000004018",
                    name: "Windry Mittens",
                    category: "apparel-accessories-gloves-and-mittens",
                    quantity: 121,
                    price: 35.00,
                    sale: false,
                },
                {
                    _id: "00000000-0000-0000-0000-000000004318",
                    name: "Niborio Tent",
                    category: "gear-camp-tents",
                    quantity: 140,
                    price: 420.00,
                    sale: true,
                }
            ];
    
  2. Вставьте документы с помощью операций upsert.

            // Insert documents with upsert
            for (const product of products) {
                const filter = { _id: product._id };
                const options = { upsert: true };
    
                await collection.replaceOne(filter, product, options);
                console.log(`Upserted product: ${product.name}`);
            }
    
            // Insert documents with upsert
            for (const product of products) {
                const filter = { _id: product._id };
                const options = { upsert: true };
    
                await collection.replaceOne(filter, product, options);
                console.log(`Upserted product: ${product.name}`);
            }
    

Получение документа

Затем выполните операцию точечного чтения, чтобы получить определенный документ из вашей коллекции.

  1. Определите фильтр для поиска определенного документа по идентификатору.

            // Retrieve a specific document by ID
            const filter = { _id: "00000000-0000-0000-0000-000000004018" };
    
            // Retrieve a specific document by ID
            const filter = { _id: "00000000-0000-0000-0000-000000004018" };
    
  2. Выполните запрос и получите результат.

            const retrievedProduct = await collection.findOne(filter);
    
            if (retrievedProduct) {
                console.log(`Retrieved product: ${retrievedProduct.name} - $${retrievedProduct.price}`);
            } else {
                console.log("Product not found");
            }
    
            const retrievedProduct = await collection.findOne(filter);
    
            if (retrievedProduct) {
                console.log(`Retrieved product: ${retrievedProduct.name} - $${retrievedProduct.price}`);
            } else {
                console.log("Product not found");
            }
    

Поиск документов

Наконец, запросите несколько документов с помощью языка запросов MongoDB (MQL).

  1. Определите запрос для поиска документов, соответствующих определенным критериям.

            // Query for products on sale
            const saleFilter = { sale: true };
            const saleProducts = await collection.find(saleFilter).toArray();
    
            // Query for products on sale
            const saleFilter = { sale: true };
            const saleProducts = await collection.find(saleFilter).toArray();
    
  2. Выполните итерацию результатов, чтобы отобразить соответствующие документы.

            console.log("Products on sale:");
            for (const product of saleProducts) {
                console.log(`- ${product.name}: $${product.price.toFixed(2)} (Category: ${product.category})`);
            }
    
        } catch (error) {
            console.error("An error occurred:", error);
        } finally {
            await client.close();
        }
    }
    
    main().catch(console.error);
    
            console.log("Products on sale:");
            for (const product of saleProducts) {
                console.log(`- ${product.name}: $${product.price.toFixed(2)} (Category: ${product.category})`);
            }
    
        } catch (error) {
            console.error("An error occurred:", error);
        } finally {
            await client.close();
        }
    }
    
    main().catch(console.error);
    

Изучение данных с помощью Visual Studio Code

Используйте расширение DocumentDB в Visual Studio Code для выполнения основных операций базы данных, включая запросы, вставку, обновление и удаление данных.

  1. Откройте Visual Studio Code.

  2. Перейдите к представлению расширений и найдите термин DocumentDB. Найдите расширение DocumentDB для VS Code .

  3. Нажмите кнопку "Установить " для расширения. Дождитесь завершения установки. При появлении запроса перезагрузите Visual Studio Code.

  4. Перейдите к расширению DocumentDB , выбрав соответствующий значок в строке действий.

  5. В области "Подключения DocumentDB" выберите +Создать подключение....

  6. В диалоговом окне выберите "Обнаружение служб" , а затем Azure DocumentDB — Обнаружение служб Azure.

  7. Выберите подписку Azure и созданный кластер Azure DocumentDB.

    Подсказка

    Во многих корпоративных средах IP-адреса компьютера разработчика скрыты из-за VPN или других параметров корпоративной сети. В этих случаях можно временно разрешить доступ ко всем IP-адресам, добавив 0.0.0.0 - 255.255.255.255 диапазон IP-адресов в качестве правила брандмауэра. Используйте это правило брандмауэра только временно в рамках тестирования и разработки подключений. Дополнительные сведения см. в разделе "Настройка брандмауэра".

  8. В области "Подключения DocumentDB" разверните узел кластера и перейдите к существующим узлам документа и коллекции.

  9. Откройте контекстное меню для коллекции, а затем выберите DocumentDB Scrapbook New DocumentDB Scrapbook>.

  10. Введите следующие команды языка запросов MongoDB (MQL) и нажмите кнопку "Выполнить все". Просмотрите выходные данные команд.

    db.products.find({
      price: { $gt: 200 },
      sale: true
    })
    .sort({ price: -1 })
    .limit(3)
    

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

Когда вы закончите работу с кластером Azure DocumentDB, вы можете удалить созданные ресурсы Azure, чтобы не взимать больше расходов.

  1. В строке поиска портал Azure найдите и выберите группы ресурсов.

    Снимок экрана: параметр поиска групп ресурсов.

  2. В списке выберите группу ресурсов, которую вы использовали для этого быстрого начала.

    Снимок экрана: группа ресурсов.

  3. На странице группы ресурсов выберите Удалить группу ресурсов.

  4. В диалоговом окне подтверждения удаления введите имя группы ресурсов, чтобы убедиться, что она будет удалена. Наконец, выберите "Удалить ", чтобы окончательно удалить группу ресурсов.

    Снимок экрана, показывающий кнопку подтверждения удаления группы ресурсов.