示例#1
0
        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);
        }
示例#2
0
        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);
        }