Armazenar dados em bancos de dados NoSQL

Concluído

Os dados não assumem apenas a forma de dados relacionais bem estruturados. Às vezes, você precisa armazenar dados que não se encaixam perfeitamente em uma tabela. Por exemplo, talvez você queira armazenar um documento que contenha uma lista de itens, cada um com um esquema diferente. Nesse caso, um banco de dados NoSQL é uma escolha melhor do que um banco de dados relacional. Um dos bancos de dados NoSQL mais populares é o MongoDB.

Usando o componente .NET Aspire MongoDB

O mesmo padrão de antes se aplica ao MongoDB. Você deve configurar o host do aplicativo e cada projeto de consumo.

Configurando o host do aplicativo

Instale o componente de hospedagem do MongoDB:

dotnet add package Aspire.Hosting.MongoDB --prerelease

Em seguida, no arquivo Program.cs do host do aplicativo, adicione este código para registrar o contêiner e criar um banco de dados:

var mongo = builder.AddMongoDB("mongo");
var mongodb = mongo.AddDatabase("mongodb");

Passe o serviço de banco de dados para todos os projetos que o consomem:

var northernTradersCatalogAPI = builder.AddProject<Projects.NorthernTraders_CatalogAPI>()
                                       .WithReference(mongodb);

Configurando os projetos de consumo

Você precisa adicionar o componente .NET Aspire MongoDB a qualquer projeto de microsserviço que use o banco de dados. Adicione o pacote NuGet Aspire.MongoDB.Driver ao projeto que precisa de acesso a dados usando a CLI do .NET ou o gerenciador de pacotes NuGet do Visual Studio.

dotnet add package Aspire.MongoDB.Driver --prerelease

No arquivo Program.cs do AppHost, registre o driver do MongoDB. Por exemplo, seu código pode ter esta aparência:

var mongoDB = builder.AddMongoDB("mongo")
                     .WithMongoExpress()
                     .AddDatabase("BasketDB");

var myService = builder.AddProject<Projects.MyService>()
                       .WithReference(mongoDB);

O componente MongoDB, como PostgeSQL e MySQL, fornece uma ferramenta de gerenciamento de banco de dados chamada Mongo Express. O código acima adiciona um contêiner para ele.

Usando um banco de dados do MongoDB

Todos os projetos em sua solução que precisam de acesso ao banco de dados do MongoDB devem adicionar um cliente MongoDB. Em seguida, use o cliente MongoDB para ler e gravar dados no banco de dados.

builder.AddMongoDBClient("BasketDB");

O método AddMongoDBClient adiciona um cliente ao projeto. Veja este código de exemplo que o usa:

using MongoDB.Driver;
using MongoDB.Driver.Linq;

public class MongoBasketStore
{
  public async Task<CustomerBasket?> GetBasketAsync(IMongoClient mongoClient, string customerId)
  {
    var basketCollection = mongoClient.GetDatabase("BasketDB").GetCollection<CustomerBasket>("basketitems");
    var filter = Builders<CustomerBasket>.Filter.Eq(r => r.BuyerId, customerId);
  
    return await basketCollection.Find(filter).FirstOrDefaultAsync();
  }
}

O código acima cria uma coleção do MongoDB que permite que o método consulte todos os objetos CustomerBasket para localizar aquele com o BuyerId correspondente.

Configurando o componente do MongoDB

Assim como os componentes anteriores do banco de dados, o componente MongoDB dá suporte à descoberta de serviço e à injeção de dependência do .NET Aspire. Portanto, se você usar o mesmo nome de banco de dados definido nos AppHost e nos projetos, não haverá necessidade de gerenciar cadeias de conexão. Mas se você já estiver usando um banco de dados MongoDB existente não gerenciado pelo .NET Aspire, você terá outras maneiras de configurá-lo.

Usando uma cadeia de conexão

No arquivo appsettings.json do seu projeto, adicione uma cadeia de conexão ao banco de dados do MongoDB. Por exemplo:

{
  ...
  "ConnectionStrings": {
    "MongoConnectionString": "mongodb://localhost:27017/test",
  }
}

A cadeia de conexão anterior adiciona suporte a um banco de dados chamado teste em um servidor de banco de dados MongoDB local escutando na porta 27017. Você usa essa cadeia de conexão no arquivo Program.cs ao criar o cliente MongoDB:

builder.AddMongoDBClient("MongoConnectionString");

Outras opções

A marca para a versão Microsoft.Extensions.Configuration do MongoDB é Aspire:MongoDB:Driver. Portanto, você pode se conectar a um banco de dados do MongoDB usando a seguinte configuração JSON:

{
  "Aspire": {
    "MongoDB": {
      "Driver": {
        "ConnectionString": "mongodb://localhost:27017/test",
        "HealthChecks": true,
        "HealthCheckTimeout": 10000,
        "Tracing": true
      },
    }
  }
}

Com a configuração anterior, você não precisa mais adicionar a cadeia de conexão, basta usar builder.AddMongoDBClient();.

A opção final é configurar a conexão no código, com configurações embutidas. Por exemplo:

builder.AddMongoDBClient("mongodb", static settings => 
  { 
    settings.ConnectionString = "mongodb://localhost:27017/test"; 
    settings.HealthChecks = true; 
  });