网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
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);
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这段代码定义了一个名为 RepositoryBase 的类,它实现了一个名为 IRepositoryBase 的接口。这个类主要用于与 MongoDB 数据库进行交互,提供了一些基本的数据库操作功能。以下是代码的详细解释:

1. 类和构造函数

public class RepositoryBase(string? connectionString) : IRepositoryBase
  • RepositoryBase 类接受一个可选的连接字符串 connectionString,用于连接到 MongoDB 数据库。
  • 如果连接字符串为空或只包含空白字符,则抛出 ArgumentNullException 异常。
  • AnyAccess 是一个私有类,用于封装 MongoDB 的访问逻辑。

2. 数据库属性

public IMongoDatabase Database => _access.Database;
  • Database 属性返回一个 IMongoDatabase 对象,允许访问 MongoDB 数据库。

3. 获取所有集合

public async Task<List<string>> GetAllCollectionAsync()
  • 该方法异步获取数据库中所有集合的名称,并返回一个字符串列表。

4. 异步搜索

public async IAsyncEnumerable<BsonDocument> SearchForAsync(
    string collectionName,
    FilterDefinition<BsonDocument>? filter = null,
    FindOptions<BsonDocument>? options = null,
    [EnumeratorCancellation] CancellationToken cancellationToken = default
)
  • 该方法允许在指定的集合中进行异步搜索。
  • filter 参数用于指定查询条件,默认为空过滤器。
  • options 参数用于指定查询选项。
  • 使用 IAsyncEnumerable<BsonDocument> 返回结果,允许逐个异步迭代结果集。

5. 插入文档

public async Task InsertAsync(string collectionName, ICollection<BsonDocument> source)
  • 该方法异步插入多个 BsonDocument 到指定的集合中。

6. 删除所有文档

public async Task DeleteAllAsync(string collectionName)
  • 该方法异步删除指定集合中的所有文档。

7. 私有类 AnyAccess

private class AnyAccess(string? connectionString) : MongodbAccess(connectionString);
  • AnyAccess 是一个私有类,继承自 MongodbAccess(假设这是一个已定义的类),用于处理与 MongoDB 的连接和访问。

总结

RepositoryBase 类提供了一组基本的 MongoDB 数据库操作,包括获取集合名称、搜索文档、插入文档和删除文档。它使用异步编程模型,以提高性能和响应能力,特别是在处理 I/O 操作时。

loading