コード例 #1
0
        private void RunUpdateCommand(GridFSBucket bucket, BsonDocument command)
        {
            var collectionName = command["update"].AsString;
            var collection     = bucket.Database.GetCollection <BsonDocument>(collectionName);
            var requests       = new List <WriteModel <BsonDocument> >();

            foreach (BsonDocument updateStatement in command["updates"].AsBsonArray)
            {
                var filter = updateStatement["q"].AsBsonDocument;
                var update = updateStatement["u"].AsBsonDocument;
                var upsert = updateStatement.GetValue("upsert", false).ToBoolean();
                var multi  = updateStatement.GetValue("multi", false).ToBoolean();
                WriteModel <BsonDocument> request;
                if (multi)
                {
                    request = new UpdateManyModel <BsonDocument>(filter, update)
                    {
                        IsUpsert = upsert
                    };
                }
                else
                {
                    request = new UpdateOneModel <BsonDocument>(filter, update)
                    {
                        IsUpsert = upsert
                    };
                }
                requests.Add(request);
            }
            collection.BulkWrite(requests);
        }
コード例 #2
0
ファイル: BinaryCategoryEncoding.cs プロジェクト: sp0x/donut
        public override async Task <BulkWriteResult <BsonDocument> > ApplyToField(IFieldDefinition field,
                                                                                  IMongoCollection <BsonDocument> collection,
                                                                                  CancellationToken?cancellationToken = null)
        {
            if (cancellationToken == null)
            {
                cancellationToken = CancellationToken.None;
            }
            var updateModels = new WriteModel <BsonDocument> [field.Extras.Extra.Count];
            int iModel       = 0;
            var dummies      = field.Extras.Extra;

            foreach (var column in dummies)
            {
                var query = Builders <BsonDocument> .Filter.And(
                    Builders <BsonDocument> .Filter.Eq(field.Name, column.Value)
                    );

                var updates = new List <UpdateDefinition <BsonDocument> >();
                updates.Add(Builders <BsonDocument> .Update.Set(field.Name, column.Key));
                var qrUpdateRoot = Builders <BsonDocument> .Update.Combine(updates);

                var actionModel = new UpdateManyModel <BsonDocument>(query, qrUpdateRoot);
                updateModels[iModel++] = actionModel;
            }
            var result = await collection.BulkWriteAsync(updateModels, new BulkWriteOptions()
            {
            }, cancellationToken.Value);

            return(result);
        }
コード例 #3
0
        public void BulkWrite_with_UpdateMany(
            [Values(false, true)] bool async)
        {
            var subject = CreateSubject();
            var model   = new UpdateManyModel <B>(_providedFilter, "{$set: {x: 1}}")
            {
                IsUpsert = true
            };
            var options = new BulkWriteOptions();

            if (async)
            {
                subject.BulkWriteAsync(new[] { model }, options, CancellationToken.None);

                _derivedCollection.Received().BulkWriteAsync(
                    Arg.Is <IEnumerable <WriteModel <B> > >(v => v.OfType <UpdateManyModel <B> >()
                                                            .Where(m => RenderFilter(m.Filter).Equals(_expectedFilter) &&
                                                                   RenderUpdate(m.Update).Equals(BsonDocument.Parse("{$set: {x: 1}}")) &&
                                                                   m.IsUpsert == model.IsUpsert).Count() == 1),
                    options,
                    CancellationToken.None);
            }
            else
            {
                subject.BulkWrite(new[] { model }, options, CancellationToken.None);

                _derivedCollection.Received().BulkWrite(
                    Arg.Is <IEnumerable <WriteModel <B> > >(v => v.OfType <UpdateManyModel <B> >()
                                                            .Where(m => RenderFilter(m.Filter).Equals(_expectedFilter) &&
                                                                   RenderUpdate(m.Update).Equals(BsonDocument.Parse("{$set: {x: 1}}")) &&
                                                                   m.IsUpsert == model.IsUpsert).Count() == 1),
                    options,
                    CancellationToken.None);
            }
        }
コード例 #4
0
        /// <summary>
        /// Update语法
        /// </summary>
        public static void Update()
        {
            List <WriteModel <BsonDocument> > InputDBList = new List <WriteModel <BsonDocument> >();
            IMongoCollection <BsonDocument>   CompanyList_ITCode2_Input = Database.GetCollection <BsonDocument>("test");
            var filter = Builders <BsonDocument> .Filter.Eq("ITCode2", "1");

            var update = Builders <BsonDocument> .Update.Set("ENTRYDT", new BsonDateTime(DateTime.Now.AddHours(8)));

            var upsert = new UpdateManyModel <BsonDocument>(filter, update);

            upsert.IsUpsert = true;
            InputDBList.Add(upsert);
            CompanyList_ITCode2_Input.BulkWrite(InputDBList);
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: roe0901/redishelper
        public static void updata()
        {
            List <WriteModel <BsonDocument> > InputDBList = new List <WriteModel <BsonDocument> >();
            IMongoDatabase Database = new MongoClient("mongodb://*****:*****@10.15.97.183:27017/DerivedData").GetDatabase("DerivedData");
            IMongoCollection <BsonDocument> CompanyList_ITCode2_Input = Database.GetCollection <BsonDocument>("test");
            var filter = Builders <BsonDocument> .Filter.Eq("ITCode2", "1");

            var update = Builders <BsonDocument> .Update.Set("ENTRYDT", new BsonDateTime(DateTime.Now.AddHours(8)));

            var upsert = new UpdateManyModel <BsonDocument>(filter, update);

            upsert.IsUpsert = true;
            InputDBList.Add(upsert);
            CompanyList_ITCode2_Input.BulkWrite(InputDBList);
        }
コード例 #6
0
        public override void PersistSet(string key)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            var filter = CreateSetFilter(key);

            var update = new BsonDocument("$set",
                                          new BsonDocument(nameof(SetDto.ExpireAt), BsonNull.Value));

            var writeModel = new UpdateManyModel <BsonDocument>(filter, update);

            _writeModels.Add(writeModel);
        }
コード例 #7
0
        // New methods to support Hangfire pro feature - batches.


        public override void ExpireSet(string key, TimeSpan expireIn)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            var filter = CreateSetFilter(key);

            var update = new BsonDocument("$set",
                                          new BsonDocument(nameof(SetDto.ExpireAt), DateTime.UtcNow.Add(expireIn)));

            var writeModel = new UpdateManyModel <BsonDocument>(filter, update);

            _writeModels.Add(writeModel);
        }
コード例 #8
0
        static void Main(string[] args)
        {
            Update();
            Console.WriteLine("Hello World!");
            List <WriteModel <BsonDocument> > InputDBList = new List <WriteModel <BsonDocument> >();
            IMongoCollection <BsonDocument>   hk_test     = Database.GetCollection <BsonDocument>("test");



            var projection = Builders <BsonDocument> .Projection.Include("ITCode2").Exclude("_id");

            //var projection = Builders<BsonDocument>.Projection.Include("ID").Include("ITCode2").Include("TMSTAMP").Exclude("_id");
            var filter1 = Builders <BsonDocument> .Filter.Ne("ID", 11);

            var result    = Database.GetCollection <BsonDocument>("hk_test").Find("{}").Project(projection).ToList().ToJson();
            var Fin_List  = BsonSerializer.Deserialize <List <teststru> >(result).AsQueryable().ToList();
            var Fin_List1 = BsonSerializer.Deserialize <List <string> >(result).AsQueryable().Distinct().ToList();

            var rep = new ReplaceOneModel <BsonDocument>(filter1, new BsonDocument("ID", 14).Add("ITCode2", "ok").Add("TMSTAMP", "OK"));

            rep.IsUpsert = true;
            InputDBList.Add(rep);
            hk_test.BulkWrite(InputDBList);



            var filter = Builders <BsonDocument> .Filter.Eq("ID", 11);

            //var update = Builders<BsonDocument>.Update.Set("ITCode2", "OK2").Set("TMSTAMP", "OK2");
            var update = Builders <BsonDocument> .Update.Set("ITCode2", new BsonDateTime(DateTime.Now));

            Database.GetCollection <BsonDocument>("test").UpdateMany("{}", update);
            //Database.GetCollection<BsonDocument>("hk_test").UpdateMany(filter, update, new UpdateOptions { IsUpsert = true});
            //var updateOptions = new UpdateOptions { IsUpsert = true };
            //InputDBList.Add(new UpdateManyModel<BsonDocument>(filter, update));
            var a = new UpdateManyModel <BsonDocument>(filter, update);

            a.IsUpsert = true;
            InputDBList.Add(a);
            hk_test.BulkWrite(InputDBList);


            //var projection = Builders<BsonDocument>.Projection.Include("ID").Include("ITCode2").Include("TMSTAMP").Exclude("_id");
            //var result = Database.GetCollection<BsonDocument>("hk_test").Find(new BsonDocument()).Project(projection).ToList().ToJson();
            ////var document2 = Database.GetCollection<BsonDocument>("TCR0002_V2").Find(new BsonDocument()).Project(projection).ToList().ToJson();
            //var DataList = BsonSerializer.Deserialize<List<BsonDocument>>(result).AsQueryable().ToList();
        }
コード例 #9
0
        public void BulkWrite_with_UpdateMany(
            [Values(false, true)] bool async)
        {
            var subject   = CreateSubject();
            var collation = new Collation("en_US");
            var model     = new UpdateManyModel <B>(_providedFilter, "{$set: {x: 1}}")
            {
                Collation = collation,
                Hint      = new BsonDocument("_id", 1),
                IsUpsert  = true
            };
            var options = new BulkWriteOptions();

            if (async)
            {
                subject.BulkWriteAsync(new[] { model }, options, CancellationToken.None);

                _mockDerivedCollection.Verify(
                    c => c.BulkWriteAsync(
                        It.Is <IEnumerable <WriteModel <B> > >(v => v.OfType <UpdateManyModel <B> >()
                                                               .Where(m => RenderFilter(m.Filter).Equals(_expectedFilter) &&
                                                                      RenderUpdate(m.Update).Equals(BsonDocument.Parse("{$set: {x: 1}}")) &&
                                                                      m.Collation == model.Collation &&
                                                                      m.Hint == model.Hint &&
                                                                      m.IsUpsert == model.IsUpsert).Count() == 1),
                        options,
                        CancellationToken.None),
                    Times.Once);
            }
            else
            {
                subject.BulkWrite(new[] { model }, options, CancellationToken.None);

                _mockDerivedCollection.Verify(
                    c => c.BulkWrite(
                        It.Is <IEnumerable <WriteModel <B> > >(v => v.OfType <UpdateManyModel <B> >()
                                                               .Where(m => RenderFilter(m.Filter).Equals(_expectedFilter) &&
                                                                      RenderUpdate(m.Update).Equals(BsonDocument.Parse("{$set: {x: 1}}")) &&
                                                                      m.Collation == model.Collation &&
                                                                      m.Hint == model.Hint &&
                                                                      m.IsUpsert == model.IsUpsert).Count() == 1),
                        options,
                        CancellationToken.None),
                    Times.Once);
            }
        }
コード例 #10
0
        public override void ExpireList(string key, TimeSpan expireIn)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            var filter = new BsonDocument("$and", new BsonArray
            {
                new BsonDocument(nameof(ListDto.Item), key),
                new BsonDocument("_t", nameof(ListDto))
            });

            var update = new BsonDocument("$set",
                                          new BsonDocument(nameof(ListDto.ExpireAt), DateTime.UtcNow.Add(expireIn)));
            var writeModel = new UpdateManyModel <BsonDocument>(filter, update);

            _writeModels.Add(writeModel);
        }
コード例 #11
0
        private bool TryParseUpdateManyModel(BsonDocument value, out WriteModel <BsonDocument> model)
        {
            FilterDefinition <BsonDocument> filter;
            UpdateDefinition <BsonDocument> update;
            List <ArrayFilterDefinition>    arrayFilters;

            if (TryParseArguments(value, out filter, out update, out arrayFilters))
            {
                model = new UpdateManyModel <BsonDocument>(filter, update)
                {
                    ArrayFilters = arrayFilters
                };
                return(true);
            }
            else
            {
                model = null;
                return(false);
            }
        }
コード例 #12
0
        public override void PersistList(string key)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            var filter = new BsonDocument("$and", new BsonArray
            {
                new BsonDocument(nameof(ListDto.Item), key),
                new BsonDocument("_t", nameof(ListDto))
            });

            var update = new BsonDocument("$set",
                                          new BsonDocument(nameof(ListDto.ExpireAt), BsonNull.Value));

            var writeModel = new UpdateManyModel <BsonDocument>(filter, update);

            _writeModels.Add(writeModel);
        }
コード例 #13
0
 private Task RunUpdateCommandAsync(GridFSBucket bucket, BsonDocument command)
 {
     var collectionName = command["update"].AsString;
     var collection = bucket.Database.GetCollection<BsonDocument>(collectionName);
     var requests = new List<WriteModel<BsonDocument>>();
     foreach (BsonDocument updateStatement in command["updates"].AsBsonArray)
     {
         var filter = updateStatement["q"].AsBsonDocument;
         var update = updateStatement["u"].AsBsonDocument;
         var upsert = updateStatement.GetValue("upsert", false).ToBoolean();
         var multi = updateStatement.GetValue("multi", false).ToBoolean();
         WriteModel<BsonDocument> request;
         if (multi)
         {
             request = new UpdateManyModel<BsonDocument>(filter, update) { IsUpsert = upsert };
         }
         else
         {
             request = new UpdateOneModel<BsonDocument>(filter, update) { IsUpsert = upsert };
         }
         requests.Add(request);
     }
     return collection.BulkWriteAsync(requests);
 }