public async Task <IReadOnlyCollection <T> > LoadAsync(ISpecification <T> spec) { var collection = _mongoDbAccess.GetDatabaseCollection <T>(); var predicate = spec.ToExpression(); var filter = _filterFactory.CreateFilterDefinition(predicate); var result = await collection.Find(filter).ToListAsync(); return(result); }
public async Task <T> SaveAsync(T aggregateRoot) { var collection = _mongoDbAccess.GetDatabaseCollection <T, TId>(); var filter = _filterDefinitionFactory.CreateFilterDefinition(f => f.Id.Equals(aggregateRoot.Id)); var updateOptions = new FindOneAndReplaceOptions <T> { IsUpsert = true, ReturnDocument = ReturnDocument.After }; var result = await collection.FindOneAndReplaceAsync(filter, aggregateRoot, updateOptions); return(result); }