using MongoDB.Bson; using MongoDB.Driver; namespace Infrastructure.Services.MongoDB; public class MongoDbService { private readonly string _collectionName; private readonly IMongoClient _database; private readonly string _databaseName; public MongoDbService(string connectionString, string databaseName, string collectionName) { _databaseName = databaseName; _collectionName = collectionName; Console.WriteLine($"Connection string: {connectionString}"); Console.WriteLine($"Database Name: {databaseName}"); Console.WriteLine($"Collection Name: {collectionName}"); var settings = MongoClientSettings.FromConnectionString(connectionString); settings.ServerApi = new ServerApi(ServerApiVersion.V1); _database = new MongoClient(settings); try { var result = _database.GetDatabase("admin").RunCommand(new BsonDocument("ping", 1)); Console.WriteLine("Pinged your deployment. You successfully connected to MongoDB!"); } catch (Exception ex) { Console.WriteLine(ex); } } public IMongoCollection GetCollection() { return _database.GetDatabase(_databaseName).GetCollection(_collectionName); } public async Task> FindAsync(List<(string FieldName, string Value)> criteria) { var collection = _database.GetDatabase(_databaseName).GetCollection(_collectionName); var filters = new List>(); foreach (var (FieldName, Value) in criteria) filters.Add(Builders.Filter.Eq(FieldName, Value)); var combinedFilter = Builders.Filter.And(filters); return await collection.Find(combinedFilter).ToListAsync(); } public async Task AddAsync(T document) { var collection = _database.GetDatabase(_databaseName).GetCollection(_collectionName); await collection.InsertOneAsync(document); } public async Task ModifyAsync(string keyField, string keyValue, T document) { var collection = _database.GetDatabase(_databaseName).GetCollection(_collectionName); var filter = Builders.Filter.Eq(keyField, keyValue); await collection.ReplaceOneAsync(filter, document, new ReplaceOptions { IsUpsert = true }); } public async Task DeleteAsync(string keyField, string keyValue) { var collection = _database.GetDatabase(_databaseName).GetCollection(_collectionName); var filter = Builders.Filter.Eq(keyField, keyValue); await collection.DeleteOneAsync(filter); } public async Task DeleteByIdAsync(string id) { var collection = _database.GetDatabase(_databaseName).GetCollection(_collectionName); var filter = Builders.Filter.Eq("_id", id); await collection.DeleteOneAsync(filter); } }