Краткое руководство. Azure Cosmos DB для MongoDB для .NET с драйвером MongoDB

Область применения: Mongodb

Начало работы с MongoDB для создания баз данных, коллекций и документов в ресурсе Azure Cosmos DB. Выполните следующие действия, чтобы развернуть минимальное решение в вашей среде с помощью Интерфейса командной строки разработчика Azure.

Справочная документация | по API для MongoDB Package (NuGet) /Microsoft.Azure.Cosmos) | Интерфейс командной строки разработчика Azure

Необходимые компоненты

Установка

Разверните контейнер разработки этого проекта в вашей среде. Затем используйте интерфейс командной строки разработчика Azure (azd) для создания учетной записи Azure Cosmos DB для MongoDB и развертывания контейнерного примера приложения. Пример приложения использует клиентская библиотека для управления, создания, чтения и запроса примеров данных.

Открытие в GitHub Codespaces

Открытие в контейнере разработки

Внимание

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

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

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

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

    azd init
    
  4. Во время инициализации настройте уникальное имя среды.

    Совет

    Имя среды также будет использоваться в качестве имени целевой группы ресурсов. В этом кратком руководстве рекомендуется использовать msdocs-cosmos-db.

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

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


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

Клиентская библиотека доступна через NuGet в качестве Microsoft.Azure.Cosmos пакета.

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

    cd ./src/web
    
  2. Если пакет еще не установлен, установите MongoDb.Driver его с помощью dotnet add package.

    dotnet add package MongoDb.Driver
    
  3. Кроме того, установите Azure.Identity пакет, если он еще не установлен.

    dotnet add package Azure.Identity
    

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

Прежде чем приступить к созданию приложения, рассмотрим иерархию ресурсов в Azure Cosmos DB. У Azure Cosmos DB есть объектная модель, используемая для создания ресурсов и доступа к ним. Azure Cosmos DB создает ресурсы в иерархии, состоящей из учетных записей, баз данных, коллекций и документов.

Схема иерархии Azure Cosmos DB с учетными записями, базами данными, коллекциями и документами.

Иерархическая схема с учетной записью Azure Cosmos DB в верхней части. У учетной записи есть два дочерних сегмента базы данных. Один из сегментов базы данных включает два дочерних сегмента коллекции. Другой сегмент базы данных включает один дочерний сегмент коллекции. Этот сегмент одной коллекции содержит три дочерних сегмента документации.

Для взаимодействия с этими ресурсами вы будете использовать следующие классы MongoDB:

  • MongoClient — Этот класс предоставляет логическое представление на стороне клиента для уровня API для MongoDB в Azure Cosmos DB. Этот клиентский объект позволяет настраивать и выполнять запросы к службе.
  • MongoDatabase — этот класс является ссылкой на базу данных, которая может еще не существовать в службе. База данных проверяется на стороне сервера при попытке доступа к ней или выполнении операции с ней.
  • Collection — этот класс является ссылкой на коллекцию, которая может еще не существовать в службе. Коллекция проверяется на стороне сервера при попытке работы с ней.

Примеры кода

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

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

Откройте файл Program.cs из каталога проекта. В редакторе добавьте директиву using для MongoDB.Driver.

using MongoDB.Driver;

Определите новый экземпляр класса MongoClient с помощью конструктора и Environment.GetEnvironmentVariable, чтобы прочитать строку подключения, которую вы настроили ранее.

// New instance of CosmosClient class
var client = new MongoClient(Environment.GetEnvironmentVariable("MONGO_CONNECTION"));

Создание базы данных

Используйте метод MongoClient.GetDatabase, чтобы создать новую базу данных, если она еще не существует. Этот метод будет возвращать ссылку на существующую или только что созданную базу данных.

// Database reference with creation if it does not already exist
var db = client.GetDatabase("adventure");

Создание коллекции

MongoDatabase.GetCollection создаст коллекцию, если она еще не существует, и возвратит ссылку на нее.

// Container reference with creation if it does not alredy exist
var _products = db.GetCollection<Product>("products");

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

Самый простой способ создать элемент в коллекции — создать класс C# или тип записи со всеми элементами, которые требуется сериализовать в JSON. В этом примере запись C# имеет уникальный идентификатор, поле категории для ключа раздела и дополнительные поля имя, количество и продажи.

public record Product(
    string Id,
    string Category,
    string Name,
    int Quantity,
    bool Sale
);

Создайте элемент в коллекции, используя запись Product, вызвав IMongoCollection<TDocument>.InsertOne.

// Create new object and upsert (create or replace) to container
_products.InsertOne(new Product(
    Guid.NewGuid().ToString(),
    "gear-surf-surfboards",
    "Yamba Surfboard", 
    12, 
    false
));

Получение элемента

В Azure Cosmos DB можно получить элементы, составив запросы с помощью Linq. В пакете SDK вызовите IMongoCollection.FindAsync<> и передайте выражение C# для фильтрации результатов.

// Read a single item from container
var product = (await _products.FindAsync(p => p.Name.Contains("Yamba"))).FirstOrDefault();
Console.WriteLine("Single product:");
Console.WriteLine(product.Name);

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

После вставки элемента можно выполнить запрос, чтобы получить все элементы, соответствующие определенному фильтру, рассматривающему коллекцию как IQueryable. В этом примере используется выражение для фильтрации продуктов по категориям. После вызова AsQueryable вызовите MongoQueryable.Where для получения набора отфильтрованных элементов.

// Read multiple items from container
_products.InsertOne(new Product(
    Guid.NewGuid().ToString(),
    "gear-surf-surfboards",
    "Sand Surfboard",
    4,
    false
));

var products = _products.AsQueryable().Where(p => p.Category == "gear-surf-surfboards");

Console.WriteLine("Multiple products:");
foreach (var prod in products)
{
    Console.WriteLine(prod.Name);
}

Выполнение кода

Это приложение создает базу данных и коллекцию API MongoDb в Azure Cosmos DB. Затем в примере создается элемент, после чего тот же элемент считывается обратно. Наконец, в этом примере создается второй элемент, а затем выполняется запрос, который должен возвращать несколько элементов. При каждом шаге в примере в консоль выводятся метаданные, связанные с выполненными шагами.

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

dotnet run

Выходные данные приложения должны выглядеть следующим образом:

Single product name: 
Yamba Surfboard
Multiple products:
Yamba Surfboard
Sand Surfboard

Очистка ресурсов

Если вам больше не нужна учетная запись Azure Cosmos DB для MongoDB, можно удалить соответствующую группу ресурсов.

Используйте команду az group delete, чтобы удалить группу ресурсов.

az group delete --name $resourceGroupName