网站首页 网站源码
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Bson;
using MongoDB.Driver;
namespace Dpz.Core.MongodbAccess;
public class RepositoryBase(string? connectionString) : IRepositoryBase
{
private readonly AnyAccess _access = string.IsNullOrWhiteSpace(connectionString)
? throw new ArgumentNullException(nameof(connectionString))
: new AnyAccess(connectionString);
public IMongoDatabase Database => _access.Database;
public async Task<List<string>> GetAllCollectionAsync()
{
using var cursor = await Database.ListCollectionNamesAsync();
var list = await cursor.ToListAsync();
return list;
}
public async IAsyncEnumerable<BsonDocument> SearchForAsync(
string collectionName,
FilterDefinition<BsonDocument>? filter = null,
FindOptions<BsonDocument>? options = null,
[EnumeratorCancellation] CancellationToken cancellationToken = default
)
{
filter ??= Builders<BsonDocument>.Filter.Empty;
var result = await Database
.GetCollection<BsonDocument>(collectionName)
.FindAsync(filter, options, cancellationToken);
while (await result.MoveNextAsync(cancellationToken))
{
foreach (var item in result.Current)
{
yield return item;
}
}
}
public async Task InsertAsync(string collectionName, ICollection<BsonDocument> source)
{
await Database.GetCollection<BsonDocument>(collectionName).InsertManyAsync(source);
}
public async Task DeleteAllAsync(string collectionName)
{
await Database
.GetCollection<BsonDocument>(collectionName)
.DeleteManyAsync(Builders<BsonDocument>.Filter.Empty);
}
private class AnyAccess(string? connectionString) : MongodbAccess(connectionString);
}
这段代码定义了一个名为 RepositoryBase
的类,它实现了一个名为 IRepositoryBase
的接口。这个类主要用于与 MongoDB 数据库进行交互,提供了一些基本的数据库操作功能。以下是代码的详细解释:
public class RepositoryBase(string? connectionString) : IRepositoryBase
RepositoryBase
类接受一个可选的连接字符串 connectionString
,用于连接到 MongoDB 数据库。ArgumentNullException
异常。AnyAccess
是一个私有类,用于封装 MongoDB 的访问逻辑。public IMongoDatabase Database => _access.Database;
Database
属性返回一个 IMongoDatabase
对象,允许访问 MongoDB 数据库。public async Task<List<string>> GetAllCollectionAsync()
public async IAsyncEnumerable<BsonDocument> SearchForAsync(
string collectionName,
FilterDefinition<BsonDocument>? filter = null,
FindOptions<BsonDocument>? options = null,
[EnumeratorCancellation] CancellationToken cancellationToken = default
)
filter
参数用于指定查询条件,默认为空过滤器。options
参数用于指定查询选项。IAsyncEnumerable<BsonDocument>
返回结果,允许逐个异步迭代结果集。public async Task InsertAsync(string collectionName, ICollection<BsonDocument> source)
BsonDocument
到指定的集合中。public async Task DeleteAllAsync(string collectionName)
private class AnyAccess(string? connectionString) : MongodbAccess(connectionString);
AnyAccess
是一个私有类,继承自 MongodbAccess
(假设这是一个已定义的类),用于处理与 MongoDB 的连接和访问。RepositoryBase
类提供了一组基本的 MongoDB 数据库操作,包括获取集合名称、搜索文档、插入文档和删除文档。它使用异步编程模型,以提高性能和响应能力,特别是在处理 I/O 操作时。