public ProfileEntity?AddToArray(string accountId, TransactionSubEntity transactionSubEntity) { using var session = _mongoRepository.Client.StartSession(); session.StartTransaction(); try { var filter = Builders <ProfileEntity> .Filter.And( Builders <ProfileEntity> .Filter.Eq(p => p.AccountId, accountId) ); var updateDefinition = Builders <ProfileEntity> .Update.Push( "Transactions", transactionSubEntity ); var result = _mongoRepository.Update(filter, updateDefinition); session.CommitTransaction(); if (result != null && !string.IsNullOrEmpty(result.Id)) { return(result); } return(null); } catch { session.AbortTransaction(); return(null); } }
public ProfileEntity?UpdateInArray(string accountId, TransactionSubEntity transactionSubEntity) { using var session = _mongoRepository.Client.StartSession(); session.StartTransaction(); try { var profile = _mongoRepository.GetSingleByParameter(p => p.AccountId == accountId); if (profile.Transactions.All(t => t.Id != transactionSubEntity.Id)) { return(null); } var filter = new BsonDocument( "AccountId", accountId ); var pullTransaction = Builders <ProfileEntity> .Update.PullFilter( "Transactions", Builders <TransactionSubEntity> .Filter.Eq("_id", transactionSubEntity.Id) ); var _ = _mongoRepository.Update(filter, pullTransaction); var pushTransaction = Builders <ProfileEntity> .Update.Push( "Transactions", transactionSubEntity ); var pushed = _mongoRepository.Update(filter, pushTransaction); session.CommitTransaction(); if (pushed != null && !string.IsNullOrEmpty(pushed.Id)) { return(pushed); } return(null); } catch { session.AbortTransaction(); return(null); } }