将数据存储在 NoSQL 数据库中

已完成

数据不只是采用结构良好的关系数据的形式。 有时,需要存储不能整齐地放入表中的数据。 例如,你可能想要存储包含项列表的文档,每个文档都有不同的架构。 在这种情况下,NoSQL 数据库是比关系数据库更好的选择。 最受欢迎的 NoSQL 数据库之一是 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);

MongoDB 组件(如 PostgeSQL 和 MySQL)提供名为 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();
  }
}

上面的代码创建一个 MongoDB 集合,该方法可以查询所有 CustomerBasket 对象以找到具有匹配 BuyerId 的对象。

配置 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; 
  });