ASP.NET и MongoDB

Создание и настройка проекта для MongoDB

Последнее обновление: 29.10.2022

В прошлых темах была рассмотрена работа с драйвером MongoDB для .NET в приложении на C#. Теперь рассмотрим, как мы можем взаимодействовать с MongoDB в рамках простейшего приложения ASP.NET.

Итак, создадим новый проект ASP.NET Core по типу ASP.NET Core Empty, который назовем MongoApp.

Создание проекта ASP.NET Core для MongoDB в C#

Для взаимодействия с сервером Mongo через пакетный менеджер Nuget установим пакет MongoDB.Driver:

Установка MongoDB.Driver для ASP.NET Core в C#

Если используется .NET CLI, то для установки пакета применяется команда

dotnet add package MongoDB.Driver

Подключение MongoDB

Согласно документации MongoDB предпочтительно создавать один экземпляр MongoClient и использовать его внутри остальных частей приложения, к тому же MongoClient потокобезопасный. То есть по сути нам надо определить объект синглтон:

using MongoDB.Bson;
using MongoDB.Driver;

var builder = WebApplication.CreateBuilder(args);

// определяем MongoClient как синглтон
builder.Services.AddSingleton(new MongoClient("mongodb://localhost:27017"));

var app = builder.Build();

app.MapGet("/", async (MongoClient client) =>     // получаем MongoClient через DI
{
    var db = client.GetDatabase("test");    // обращаемся к базе данных
    var collection = db.GetCollection<BsonDocument>("users"); // получаем коллекцию users
    // для теста добавляем начальные данные, если коллекция пуста
    if (await collection.CountDocumentsAsync("{}") == 0)
    {
        await collection.InsertManyAsync(new List<BsonDocument>
        {
            new BsonDocument{ { "Name", "Tom" },{"Age", 22}},
            new BsonDocument{ { "Name", "Bob" },{"Age", 42}}
        });
    }
    var users =  await collection.Find("{}").ToListAsync();
    return users.ToJson();  // отправляем клиенту все документы из коллекции
});
app.Run();

С помощью метода builder.Services.AddSingleton() добавляем MongoClient в сервисы приложения, и затем мы можем получить данный сервис как и любой другой через стандартный способы получения зависимостей в ASP.NET Core. В данном случае получаем MongoClient получаем через обработчик конечной точки. Затем внутри обработчика уже можно обращаться к базе данных и ее коллекциям и производить операции с данными. Так, здесь для теста просто отправляем все документы из коллекции:

Подключение к базе данных MongoDB в приложении ASP.NET Core на C#

Но также стоит отметить, что согласно документации объект IMongoDatabase также потокобезопасный и может применяться как синглтон. Поэтому, если нам необходимо обращаться к одной и той же базе данных, то мы можем также определить объект IMongoDatabase как синглтон и передавать его через механизм DI в приложение:

using MongoDB.Bson;
using MongoDB.Driver;

var builder = WebApplication.CreateBuilder(args);

// определяем IMongoDatabase как синглтон
builder.Services.AddSingleton(new MongoClient("mongodb://localhost:27017").GetDatabase("test"));

var app = builder.Build();

app.MapGet("/", async (IMongoDatabase db) =>     // получаем IMongoDatabase - базу данных "test" через DI
{
    var collection = db.GetCollection<BsonDocument>("users"); // получаем коллекцию users
    // для теста добавляем начальные данные, если коллекция пуста
    if (await collection.CountDocumentsAsync("{}") == 0)
    {
        await collection.InsertManyAsync(new List<BsonDocument>
        {
            new BsonDocument{ { "Name", "Tom" },{"Age", 38}},
            new BsonDocument{ { "Name", "Bob" },{"Age", 42}}
        });
    }
    var users =  await collection.Find("{}").ToListAsync();
    return users.ToJson();  // отправляем клиенту все документы из коллекции
});
app.Run();
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850