using Application.Services.Database; using MongoDB.Bson; using MongoDB.Driver; namespace Infrastructure.Services.MongoDB; public class MongoDbService : IMongoDbService { private readonly IMongoDatabase _database; public MongoDbService(string connectionString) { var settings = MongoClientSettings.FromConnectionString(connectionString); settings.ServerApi = new ServerApi(ServerApiVersion.V1); var _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(string collectionName) { return _database.GetCollection(collectionName); } public async Task> FindAsync(string collectionName, List<(string FieldName, string Value)> criteria) { var collection = _database.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(string collectionName, T document) { var collection = _database.GetCollection(collectionName); await collection.InsertOneAsync(document); } public async Task ModifyAsync(string collectionName, string keyField, string keyValue, T document) { var collection = _database.GetCollection(collectionName); var filter = Builders.Filter.Eq(keyField, keyValue); await collection.ReplaceOneAsync(filter, document, new ReplaceOptions { IsUpsert = true }); } public async Task DeleteAsync(string collectionName, string keyField, string keyValue) { var collection = _database.GetCollection(collectionName); var filter = Builders.Filter.Eq(keyField, keyValue); await collection.DeleteOneAsync(filter); } }