public Task UpdateDtoAsync(FilterDefinition <TDto> query, UpdateDefinition <TDto> update)
        {
            if (isVersioned)
            {
                update = update.Inc("Version", 1);
            }

            if (isReadObject)
            {
                update = update.Set("WriteTimestampUtc", DateTime.UtcNow);
            }

            return(Collection.UpdateOneAsync(query, update));
        }
        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);
        }