NoSQL データベースにデータを格納する

完了

データは、適切に構造化されたリレーショナル データの形式を取るだけではありません。 テーブルに適切に収まらないデータを格納する必要がある場合があります。 たとえば、それぞれスキーマが異なるアイテムのリストを含むドキュメントを格納したいとします。 この場合、リレーショナル データベースよりも NoSQL データベースの方が適しています。 最も一般的な NoSQL データベースの 1 つは MongoDB です。

.NET Aspire MongoDB コンポーネントの使用

以前と同じパターンが MongoDB に適用されます。 アプリ ホスティング プロセスと各使用プロジェクトの両方を構成する必要があります。

アプリ ホスティング プロセスの構成

MongoDB ホスティング コンポーネントをインストールします:

dotnet add package Aspire.Hosting.MongoDB --prerelease

次に、アプリ ホスティング プロセスの Program.cs ファイルで、次のコードを追加してコンテナーを登録し、データベースを作成します:

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

データベース サービスを使用するすべてのプロジェクトに渡します:

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

使用側のプロジェクトの構成

データベースを使用するマイクロサービス プロジェクトに .NET Aspire MongoDB コンポーネントを追加する必要があります。 .NET CLI または Visual Studio NuGet パッケージ マネージャーを使用して、データ アクセスが必要なプロジェクトに Aspire.MongoDB.Driver NuGet パッケージを追加します。

dotnet add package Aspire.MongoDB.Driver --prerelease

AppHost Program.cs ファイルで、MongoDB ドライバーを登録します。 たとえば、コードは次のようになります:

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

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

PostgeSQL や MySQL などの MongoDB コンポーネントには、Mongo Express と呼ばれるデータベース管理ツールが用意されています。 上記のコードでは、コンテナーが追加されます。

MongoDB データベースの使用

MongoDB データベースにアクセスする必要があるソリューション内のすべてのプロジェクトで、MongoDB クライアントを追加する必要があります。 その後、MongoDB クライアントを使用して、データベースに対するデータの読み取りと書き込みを行います。

builder.AddMongoDBClient("BasketDB");

AddMongoDBClient メソッドは、クライアントをプロジェクトに追加します。 これを使用する次のコード例を参照してください:

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

上記のコードでは、メソッドがすべての CustomerBasket オブジェクトに対してクエリを実行して、一致する BuyerId を見つけられるようにする MongoDB コレクションを作成します。

MongoDB コンポーネントの構成

以前のデータベース コンポーネントと同様に、MongoDB コンポーネントでは、.NET Aspire のサービス検出と依存関係の挿入がサポートされています。 そのため、同じデータベース名を AppHost やプロジェクトで定義した場合、接続文字列を管理する必要はありません。 ただし、.NET Aspire によって管理されていない既存の MongoDB データベースを既に使用している場合は、それを構成する他の方法があります。

接続文字列の使用

プロジェクト appsettings.json ファイルで、MongoDB データベースへの接続文字列を追加します。 次に例を示します。

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

前の接続文字列では、ポート 27017 でリッスンしているローカル MongoDB データベース サーバーで、testという名前のデータベースのサポートが追加されています。 MongoDB クライアントを作成するときに、Program.cs ファイルでこの接続文字列を使用します:

builder.AddMongoDBClient("MongoConnectionString");

その他のオプション

MongoDB の Microsoft.Extensions.Configuration バージョンのタグは Aspire:MongoDB:Driver です。 そのため、次の JSON 構成を使用して MongoDB データベースに接続できます:

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

以前の構成では、接続文字列を追加する必要がなくなりました。builder.AddMongoDBClient(); を使用するだけです。

最後のオプションは、インライン構成を使用して、コードで接続を構成することです。 次に例を示します。

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