public static DataContracts.UpdateResult UpdateMany <T>(string collectionName, FilterDefinition <T> filter, UpdateDefinition <T> update, UpdateOptions updateOptions, string schemaId = "", Notification notification = null) { var request = new UpdateMany { CollectionName = collectionName, OutputMode = JsonOutputMode.Strict, Filter = filter.ToJson(), Notification = notification, Update = update.ToBsonDocument().ToJson(), UpdateOptions = updateOptions, SchemaId = schemaId, CultureCode = CultureInfo.CurrentCulture.Name }; var response = Send <UpdateOneResponse>("entities/" + collectionName + "/bulk", request, "PUT"); return(response.Result); }
public long Update <T>(Expression <Func <T, bool> > criteria, Expression <Func <T, T> > update) where T : class { UpdateDefinition <T> updateDefinition = null; var expression = (MemberInitExpression)update.Body; foreach (var binding in expression.Bindings) { var name = binding.Member.Name; object value; var memberExpression = ((MemberAssignment)binding).Expression; var constantExpression = memberExpression as ConstantExpression; if (constantExpression != null) { value = constantExpression.Value; } else { var lambda = Expression.Lambda(memberExpression, null); value = lambda.Compile().DynamicInvoke(); } if (updateDefinition == null) { updateDefinition = Builders <T> .Update.Set(name, BsonValue.Create(value)); } else { updateDefinition.Set(name, BsonValue.Create(value)); } } if (updateDefinition == null) { return(0L); } var result = GetCollection <T>().UpdateMany(new ExpressionFilterDefinition <T>(criteria), new BsonDocumentUpdateDefinition <T>(updateDefinition.ToBsonDocument()), new UpdateOptions { IsUpsert = false }); return(result.IsAcknowledged && result.IsModifiedCountAvailable ? result.ModifiedCount : 0); }