protected virtual UpdateDefinition <T> ToUpdateDefinition(Updates <T> updates) { UpdateDefinition <T> updateDefinition = Builders <T> .Update.Combine(); if (updates.Sets != null) { foreach (Update <T> update in updates.Sets) { updateDefinition = updateDefinition.Set(update.PropertyExpression, update.Value); } } if (updates.Increments != null) { foreach (Update <T> update in updates.Increments) { updateDefinition = updateDefinition.Inc(update.PropertyExpression, update.Value); } } if (updates.SetOnInserts != null) { foreach (Update <T> update in updates.SetOnInserts) { updateDefinition = updateDefinition.SetOnInsert(update.PropertyExpression, update.Value); } } if (updates.Pushes != null) { foreach (UpdateCollection <T> update in updates.Pushes) { var property = new ExpressionFieldDefinition <T>(update.PropertyExpression); updateDefinition = updateDefinition.Push(property, update.Value); } } if (updates.Pulls != null) { foreach (UpdateCollection <T> update in updates.Pulls) { var property = new ExpressionFieldDefinition <T>(update.PropertyExpression); updateDefinition = updateDefinition.Pull(property, update.Value); } } return(updateDefinition); }
public async Task <bool> AddActivityAndManageConnectionToUserAsync(string userId, Activity activity, Connection connection) { try { if (activity != null) { UpdateDefinition <User> updateQuery = Builders <User> .Update.Push("Activities", activity); bool isOnline = activity.ActivityType == ChatServer.API.Model.Enum.ActivityType.getOnline; updateQuery = updateQuery.Set("IsOnline", isOnline); if (connection != null) { updateQuery = (isOnline) ? updateQuery.Push("Connections", connection) : updateQuery.Pull("Connections", connection); } await _users.FindOneAndUpdateAsync(Builders <User> .Filter.Eq("Id", userId), updateQuery); return(true); } } catch (Exception ex) { _logger.LogError(ex, "AddActivityAndManageConnectionToUserAsync UserRepository Exception"); } return(false); }