/// <summary>
 /// Adds an update request to update one matching document to the bulk operation.
 /// </summary>
 /// <param name="update">The update.</param>
 public void UpdateOne(IMongoUpdate update)
 {
     if (update == null)
     {
         throw new ArgumentNullException("update");
     }
     Update(update.ToBsonDocument(), false);
 }
示例#2
0
        public override WriteConcernResult Update(IMongoQuery query, IMongoUpdate update, MongoUpdateOptions options)
        {
            var sw = new Stopwatch();

            sw.Start();
            var result = base.Update(query, update, options);

            sw.Stop();

            var commandStringBuilder = new StringBuilder(1024);

            commandStringBuilder.AppendFormat("db.{0}.update(query, update", Name);

            var optionsList = new List <string>();

            if ((options.Flags & UpdateFlags.Upsert) == UpdateFlags.Upsert)
            {
                optionsList.Add("upsert: true");
            }

            if ((options.Flags & UpdateFlags.Multi) == UpdateFlags.Multi)
            {
                optionsList.Add("multi: true");
            }

            if (optionsList.Any())
            {
                commandStringBuilder.AppendFormat("{{ {0} }}", string.Join(", ", optionsList));
            }

            commandStringBuilder.Append(")");

            if (query != null)
            {
                commandStringBuilder.AppendFormat("\nquery = {0}", query.ToBsonDocument());
            }
            else
            {
                commandStringBuilder.Append("\nquery = {}");
            }

            if (update != null)
            {
                commandStringBuilder.AppendFormat("\nupdate = {0}", update.ToBsonDocument());
            }
            else
            {
                commandStringBuilder.Append("\nupdate = {}");
            }

            string commandString = commandStringBuilder.ToString();

            ProfilerUtils.AddMongoTiming(commandString, sw.ElapsedMilliseconds, ExecuteType.Update);

            return(result);
        }
示例#3
0
        public void UpdateTest()
        {
            IMongoQuery  query  = null;
            IMongoUpdate update = null;

            collection.Setup(c => c.Update(It.IsAny <IMongoQuery>(), It.IsAny <IMongoUpdate>()))
            .Callback <IMongoQuery, IMongoUpdate>((q, u) =>
            {
                query  = q;
                update = u;
            }).Returns(() =>
            {
                return(new MongoMockResult());
            });

            var entity = new NamedEntity {
                name = "First"
            };

            repository.Create(entity);

            var updateEntity = new NamedEntity {
                name = "Second"
            };

            repository.Update(entity.id, updateEntity);
            Assert.IsNotNull(query);
            Assert.IsNotNull(update);

            Assert.AreEqual(entity.id, query.ToBsonDocument()["_id"].ToString());
            var document = update.ToBsonDocument();

            Assert.IsNotNull(document["$set"]["updated_at"]);
            Assert.AreEqual(updateEntity.name, document["$set"]["name"].AsString);
            Assert.AreEqual(2, document["$set"].AsBsonDocument.ElementCount);
        }
示例#4
0
        private FindAndModifyResult FindAndModifyImpl(IMongoQuery query, IMongoSortBy sortBy, bool remove, IMongoUpdate update, bool returnNew, IMongoFields fields, bool upsert)
        {
            var sw = new Stopwatch();

            sw.Start();
            var result = base.FindAndModify(query, sortBy, update, fields, returnNew, upsert);

            sw.Stop();

            var commandStringBuilder = new StringBuilder(1024);

            commandStringBuilder.AppendFormat("db.{0}.findAndModify(query, sort, remove, update, new, fields, upsert)", Name);

            if (query != null)
            {
                commandStringBuilder.AppendFormat("\nquery = {0}", query.ToBsonDocument());
            }
            else
            {
                commandStringBuilder.Append("\nquery = null");
            }

            if (sortBy != null)
            {
                commandStringBuilder.AppendFormat("\nsort = {0}", sortBy.ToBsonDocument());
            }
            else
            {
                commandStringBuilder.Append("\nsort = null");
            }

            commandStringBuilder.AppendFormat("\nremove = {0}", remove ? "true" : "false");

            if (update != null)
            {
                commandStringBuilder.AppendFormat("\nupdate = {0}", update.ToBsonDocument());
            }
            else
            {
                commandStringBuilder.Append("\nupdate = null");
            }

            commandStringBuilder.AppendFormat("\nnew = {0}", returnNew ? "true" : "false");

            if (fields != null)
            {
                commandStringBuilder.AppendFormat("\nfields = {0}", fields.ToBsonDocument());
            }
            else
            {
                commandStringBuilder.Append("\nfields = null");
            }

            commandStringBuilder.AppendFormat("\nupsert = {0}", upsert ? "true" : "false");

            string commandString = commandStringBuilder.ToString();

            ProfilerUtils.AddMongoTiming(commandString, sw.ElapsedMilliseconds, ExecuteType.Update);

            return(result);
        }