Exemplo n.º 1
0
        protected override UpdateResult ExecuteAndGetResult(IMongoDatabase database, IMongoCollection <BsonDocument> collection, bool async)
        {
            UpdateDefinition <BsonDocument> updateDefinition = null;

            if (_update is BsonDocument updateDocument)
            {
                updateDefinition = new BsonDocumentUpdateDefinition <BsonDocument>(updateDocument);
            }
            else if (_update is BsonArray stages)
            {
                var pipeline = new BsonDocumentStagePipelineDefinition <BsonDocument, BsonDocument>(stages.Cast <BsonDocument>());
                updateDefinition = new PipelineUpdateDefinition <BsonDocument>(pipeline);
            }

            if (async)
            {
                return(collection
                       .UpdateManyAsync(_filter, updateDefinition, _options)
                       .GetAwaiter()
                       .GetResult());
            }
            else
            {
                return(collection.UpdateMany(_filter, updateDefinition, _options));
            }
        }
Exemplo n.º 2
0
        public virtual async Task <bool> Update(Expression <Func <TEntity, bool> > predicate, TEntity obj)
        {
            var update = new BsonDocumentUpdateDefinition <TEntity>(obj.ToBsonDocument());
            var result = await document.UpdateManyAsync(predicate, update);

            return(result.IsAcknowledged && result.ModifiedCount > 0);
        }
Exemplo n.º 3
0
        public void ReplaceOne(T document)
        {
            var filter = Builders <T> .Filter.Eq(nameof(document.Id), document.Id);

            var update = new BsonDocumentUpdateDefinition <BsonDocument>(document.ToBsonDocument());

            Collection.ReplaceOne(filter, document);
        }
Exemplo n.º 4
0
        private UpdateOneModel <BsonDocument> ParseUpdateOne(BsonDocument request)
        {
            var filter = new BsonDocumentFilterDefinition <BsonDocument>((BsonDocument)request["filter"]);
            var update = new BsonDocumentUpdateDefinition <BsonDocument>((BsonDocument)request["update"]);
            var model  = new UpdateOneModel <BsonDocument>(filter, update);

            model.IsUpsert = request.GetValue("upsert", false).ToBoolean();
            return(model);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 更新操作
        /// </summary>
        /// <param name="collectionName">集合名称</param>
        /// <param name="t">更新对象</param>
        /// <param name="filter">条件</param>
        /// <returns>更新是否成功true or false</returns>
        public bool UpdateOne <T>(string collectionName, Expression <Func <T, bool> > filter, T t)
        {
            if (t == null)
            {
                return(false);
            }

            var itemBson  = t.ToBsonDocument();
            var updateDef = new BsonDocumentUpdateDefinition <T>(new BsonDocument("$set", itemBson));

            return(UpdateOne <T>(collectionName, filter, updateDef));
        }
Exemplo n.º 6
0
        public async Task <ReceivedMessage> GetNextAsync()
        {
            var now = DateTime.UtcNow;

            var receiveTimeCriteria = new BsonDocument {
                { "$lt", now.Subtract(_config.DefaultMessageLease) }
            };

            var filter = new BsonDocumentFilterDefinition <BsonDocument>(new BsonDocument
            {
                { Fields.DestinationQueueName, QueueName },
                { Fields.ReceiveTime, receiveTimeCriteria },
                { Fields.DeliveryAttempts, new BsonDocument {
                      { "$lt", _config.MaxDeliveryAttempts }
                  } },
            });

            var update = new BsonDocumentUpdateDefinition <BsonDocument>(new BsonDocument
            {
                { "$set", new BsonDocument {
                      { Fields.ReceiveTime, now }
                  } },
                { "$inc", new BsonDocument {
                      { Fields.DeliveryAttempts, 1 }
                  } }
            });

            var options = new FindOneAndUpdateOptions <BsonDocument>
            {
                ReturnDocument = ReturnDocument.After
            };

            var collection = _config.Collection;

            await _semaphore.WaitAsync();

            try
            {
                var document = await collection.FindOneAndUpdateAsync(filter, update, options);

                if (document == null)
                {
                    return(null);
                }

                return(GetReceivedMessage(document));
            }
            finally
            {
                _semaphore.Release();
            }
        }
Exemplo n.º 7
0
        private UpdateOneModel <BsonDocument> ParseUpdateOneModel(BsonDocument model)
        {
            JsonDrivenHelper.EnsureAllFieldsAreValid(model, "filter", "update", "upsert");

            var filter   = new BsonDocumentFilterDefinition <BsonDocument>(model["filter"].AsBsonDocument);
            var update   = new BsonDocumentUpdateDefinition <BsonDocument>(model["update"].AsBsonDocument);
            var isUpsert = model.GetValue("upsert", false).ToBoolean();

            return(new UpdateOneModel <BsonDocument>(filter, update)
            {
                IsUpsert = isUpsert
            });
        }
Exemplo n.º 8
0
    public async Task Set(Position position)
    {
        var criteria = new BsonDocumentFilterDefinition <BsonDocument>(new BsonDocument
        {
            { "_id", position.Topic }
        });

        var update = new BsonDocumentUpdateDefinition <BsonDocument>(new BsonDocument
        {
            { "$set", new BsonDocument {
                  { position.Partition.ToString(), position.Offset }
              } }
        });

        await _positions.UpdateOneAsync(criteria, update, new UpdateOptions { IsUpsert = true });
    }
Exemplo n.º 9
0
        public void updateUser(UserModel userModel)
        {
            var filter = Builders <UserModel> .Filter.Eq("_id", userModel.Id);

            try
            {
                var dictionary   = makeDictionaryFromModel(userModel);
                var bsonDocument = new BsonDocument("$set", dictionary.ToBsonDocument());
                var update       = new BsonDocumentUpdateDefinition <UserModel>(bsonDocument);
                db_.GetCollection <UserModel>("User").UpdateOne(filter, update);
            }
            catch (Exception ex)
            {
                throw new Exception("User update fail" + ex.Message);
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Update one or more documents partially by filter
        /// </summary>
        /// <param name="filters"></param>
        /// <param name="partialDocument"></param>
        /// <returns></returns>
        public bool UpdateByQuery(FilterDefinition <TDocument> filters, object partialDocument)
        {
            filters = filters ?? FilterBuilder.GetFilterBuilder <TDocument>().Empty;

            if (partialDocument == null)
            {
                throw new ArgumentNullException(nameof(partialDocument));
            }

            var updateMapped = new BsonDocument {
                { "$set", partialDocument.ToBsonDocument() }
            };

            var update = new BsonDocumentUpdateDefinition <TDocument>(updateMapped);

            return(this.Collection.UpdateMany(filters, update).IsAcknowledged);
        }
Exemplo n.º 11
0
        public UpdateResult Update(string set_name, Dictionary <object, object> search, string _op, Dictionary <object, object> data)
        {
            if (search.ContainsKey("_id"))
            {
                search["_id"] = new ObjectId(search["_id"].ToString());
            }
            BsonDocument bfilter = new BsonDocument(search);
            BsonDocumentFilterDefinition <BsonDocument> filterDef = new BsonDocumentFilterDefinition <BsonDocument>(bfilter);
            Dictionary <object, object> op = new Dictionary <object, object>();

            op.Add(_op, data);
            BsonDocument bdata = new BsonDocument(op);
            BsonDocumentUpdateDefinition <BsonDocument> updateDef = new BsonDocumentUpdateDefinition <BsonDocument>(bdata);
            UpdateResult ures = mdb.GetCollection <BsonDocument>(set_name).UpdateMany(filterDef, updateDef);

            return(ures);
        }
Exemplo n.º 12
0
        public void ShouldUpdateUser(string hostname, int portNum, string databaseName)
        {
            var update = new UpdateDefinitionBuilder <User>();

            update.Set("Phone", "5132359201");

            var nsContext = new NeighborstashContext(new NeighbostashDbSettings
            {
                ConnectionString = $"mongodb://{hostname}:{portNum}",
                DatabaseName     = databaseName
            });



            // UpdateDefinition<User> upd ="{Phone:5132359206}";
            var builder = Builders <User> .Filter;
            var filter  = builder.Eq(u => u.Lastname, "Teddie");

            var ub = Builders <User> .Update;

            UpdateDefinition <User> updater = new BsonDocumentUpdateDefinition <User>(new BsonDocument
            {
                { "Locale", "En" }
            });


            var filterDefinition = Builders <User> .Filter.Empty;

            filterDefinition &= Builders <User> .Filter.Eq(u => u.Email, "*****@*****.**");

            var qFind = nsContext.Users.Find(filterDefinition);
            var user  = qFind.First();

            Console.WriteLine($"{user.Lastname}, {user.Firstname}");

            var result = nsContext.Users.UpdateOne(u => u.Email == "*****@*****.**", updater, null);

            Assert.IsTrue(result.IsAcknowledged);

            //var modification = new UpdateDefinition<User>().Push(u => u.Lastname, "").Set(r => r.DateOfBirth, "");
        }
        public UnifiedFindOneAndUpdateOperation Build(string targetCollectionId, BsonDocument arguments)
        {
            var collection = _entityMap.GetCollection(targetCollectionId);

            FilterDefinition <BsonDocument>        filter  = null;
            FindOneAndUpdateOptions <BsonDocument> options = null;
            UpdateDefinition <BsonDocument>        update  = null;

            foreach (var argument in arguments)
            {
                switch (argument.Name)
                {
                case "filter":
                    filter = new BsonDocumentFilterDefinition <BsonDocument>(argument.Value.AsBsonDocument);
                    break;

                case "returnDocument":
                    options = options ?? new FindOneAndUpdateOptions <BsonDocument>();
                    options.ReturnDocument = (ReturnDocument)Enum.Parse(typeof(ReturnDocument), argument.Value.AsString);
                    break;

                case "sort":
                    options      = options ?? new FindOneAndUpdateOptions <BsonDocument>();
                    options.Sort = new BsonDocumentSortDefinition <BsonDocument>(argument.Value.AsBsonDocument);
                    break;

                case "update":
                    update = new BsonDocumentUpdateDefinition <BsonDocument>(argument.Value.AsBsonDocument);
                    break;

                default:
                    throw new FormatException($"Invalid FindOneAndUpdateOperation argument name: '{argument.Name}'.");
                }
            }

            return(new UnifiedFindOneAndUpdateOperation(collection, filter, update, options));
        }
Exemplo n.º 14
0
 private bool TryParseUpdate(BsonDocument value, out UpdateDefinition <BsonDocument> update)
 {
     update = new BsonDocumentUpdateDefinition <BsonDocument>(value);
     return(true);
 }
Exemplo n.º 15
0
 private UpdateOneModel<BsonDocument> ParseUpdateOne(BsonDocument request)
 {
     var filter = new BsonDocumentFilterDefinition<BsonDocument>((BsonDocument)request["filter"]);
     var update = new BsonDocumentUpdateDefinition<BsonDocument>((BsonDocument)request["update"]);
     var model = new UpdateOneModel<BsonDocument>(filter, update);
     model.IsUpsert = request.GetValue("upsert", false).ToBoolean();
     return model;
 }