搭配Day1提到的功能,先建立使用者資訊,所以這裡示範的是UserService
dotnet add package MongoDB.Driver
connection string可以直接從Atlas MongoDB獲得
{
"MongoDbSettings": {
"ConnectionString": "<connection string>",
"DatabaseName": "<database name>"
},
}
定義類別
public class MongoDbSettings
{
public string ConnectionString { get; set; } = null!;
public string DatabaseName { get; set; } = null!;
}
這個是因為我懶得在每一個service裡,再寫一次連線,所以把collection集中起來。
有先在Models下建立User類別的定義了,所以可以直接在這裡用:
public class AppMongoDbContext
{
private readonly IMongoDatabase _database;
public AppMongoDbContext(IOptions<MongoDbSettings> settings)
{
var client = new MongoClient(settings.Value.ConnectionString);
_database = client.GetDatabase(settings.Value.DatabaseName);
}
public IMongoCollection<User> Users => _database.GetCollection<User>("Users");
// 加入更多的collection
}
var builder = WebApplication.CreateBuilder(args);
// 下面兩行
builder.Services.Configure<MongoDbSettings>(
builder.Configuration.GetSection("MongoDbSettings"));
builder.Services.AddSingleton<AppMongoDbContext>()
public class UserService
{
private readonly IMongoCollection<User> _users;
public UserService(AppMongoDbContext dbContext)
{
_users = dbContext.Users;
}
public async Task<List<User>> GetUserAsync() => await _users.Find(user => true).ToListAsync();
}
處理資料庫連線
原本想講一下結構寫法的,但今天在處理連線的部分,就先分享了,真的是程式寫到哪,文章跟著寫什麼,非常隨性 雖然可以用mongosh直接建collection,但已經習慣用orm自動/手動migrate,感覺要找一下這邊怎麼用