예제 #1
0
        public void TestBsonListClear()
        {
            var collection = GetTestCollection <BsonDocument>();

            Role role = new Role {
                RoleID = 1
            };

            role.ListInt.Add(10);
            role.ListInt.Add(11);
            role.ListInt.Add(12);
            role.ClearDirty();

            collection.InsertOne((BsonDocument)role);

            UpdateContext context = new UpdateContext();

            role.ListInt.Clear();
            role.Update(context);

            var bsonUpdate = context.Build();

            Assert.AreEqual(BsonDocument.Parse("{'$unset': {'ListInt': 1}}"), bsonUpdate);

            collection.UpdateOne(new BsonDocument {
                { "_id", 1 }
            }, context.Build());

            var actual     = collection.Find(new BsonDocument()).First();
            var roleActual = (Role)actual;

            Assert.AreEqual(0, roleActual.ListInt.Count);
        }
예제 #2
0
        public void TestBsonDictSetNull()
        {
            var collection = GetTestCollection <BsonDocument>();

            Role role = new Role {
                RoleID = 1
            };

            collection.InsertOne((BsonDocument)role);

            UpdateContext context = new UpdateContext();

            role.Friends.Add(11, null);
            role.Update(context);

            var bsonUpdate = context.Build();

            Assert.AreEqual(BsonDocument.Parse("{$set:{'Friends.11': null}}"), bsonUpdate);

            collection.UpdateOne(new BsonDocument {
                { "_id", 1 }
            }, bsonUpdate);

            var actual     = collection.Find(new BsonDocument()).First();
            var roleActual = (Role)actual;

            Assert.AreEqual(null, roleActual.Friends[11]);
        }
예제 #3
0
        public void TestBsonDictRemove()
        {
            var collection = GetTestCollection <BsonDocument>();

            Role role = new Role {
                RoleID = 1
            };

            role.Texts[11] = "abc";
            role.ClearDirty();
            collection.InsertOne((BsonDocument)role);

            UpdateContext context = new UpdateContext();

            role.Texts.Remove(11);
            role.Update(context);

            var bsonUpdate = context.Build();

            Assert.AreEqual(BsonDocument.Parse("{$unset:{'Texts': 1}}"), bsonUpdate);

            collection.UpdateOne(new BsonDocument {
                { "_id", 1 }
            }, bsonUpdate);

            var actual     = collection.Find(new BsonDocument()).First();
            var roleActual = (Role)actual;

            Assert.AreEqual(0, roleActual.Texts.Count);
        }
예제 #4
0
        public void TestBsonListAddNull()
        {
            var collection = GetTestCollection <BsonDocument>();

            Role role = new Role {
                RoleID = 1
            };

            collection.InsertOne((BsonDocument)role);

            UpdateContext context = new UpdateContext();

            role.ListFriend.Add(null);
            role.Update(context);

            var bsonUpdate = context.Build();

            Assert.AreEqual(BsonDocument.Parse("{$set:{'ListFriend.1': {'PrevKey':0, 'Value':null}}}"), bsonUpdate);

            collection.UpdateOne(new BsonDocument {
                { "_id", 1 }
            }, bsonUpdate);

            var actual     = collection.Find(new BsonDocument()).First();
            var roleActual = (Role)actual;

            Assert.AreEqual(null, roleActual.ListFriend[0]);
        }
예제 #5
0
        public void TestBsonList_IndexSet()
        {
            var collection = GetTestCollection <BsonDocument>();

            Role role = new Role {
                RoleID = 1
            };

            role.ListInt.Add(10);
            role.ListInt.Add(11);
            role.ListInt.Add(12);
            role.ClearDirty();

            collection.InsertOne((BsonDocument)role);

            UpdateContext context = new UpdateContext();

            role.ListInt[1] = 21;
            role.Update(context);

            collection.UpdateOne(new BsonDocument {
                { "_id", 1 }
            }, context.Build());

            var actual     = collection.Find(new BsonDocument()).First();
            var roleActual = (Role)actual;

            Assert.AreEqual(10, roleActual.ListInt[0]);
            Assert.AreEqual(21, roleActual.ListInt[1]);
            Assert.AreEqual(12, roleActual.ListInt[2]);
        }
예제 #6
0
        public void TestBsonList_RemoveAt_Middle()
        {
            var collection = GetTestCollection <BsonDocument>();

            Role role = new Role {
                RoleID = 1
            };

            role.ListInt.Add(10);
            role.ListInt.Add(11);
            role.ListInt.Add(12);
            role.ClearDirty();

            collection.InsertOne((BsonDocument)role);

            UpdateContext context = new UpdateContext();

            role.ListInt.RemoveAt(1);
            role.Update(context);

            var bsonUpdate = context.Build();

            Assert.AreEqual(new BsonDocument {
                {
                    "$set",
                    new BsonDocument {
                        { "ListInt.3.PrevKey", 1 }
                    }
                },
                {
                    "$unset",
                    new BsonDocument {
                        { "ListInt.2", 1 }
                    }
                }
            }, bsonUpdate);

            collection.UpdateOne(new BsonDocument {
                { "_id", 1 }
            }, context.Build());

            var actual     = collection.Find(new BsonDocument()).First();
            var roleActual = (Role)actual;

            Assert.AreEqual(10, roleActual.ListInt[0]);
            Assert.AreEqual(12, roleActual.ListInt[1]);
        }
예제 #7
0
        public void SetProperty()
        {
            Role role = CreateRole();

            role.RoleName = "test";

            role.Update(context);
            Assert.AreEqual(BsonDocument.Parse("{$set:{'RoleName':'test'}}"), context.Build());

            role.ClearDirty();
            context.Clear();

            role.RoleName = null;
            role.Update(context);
            Assert.AreEqual(BsonDocument.Parse("{$unset:{'RoleName':1}}"), context.Build());
        }
예제 #8
0
        public void TestUpdateVsReplace()
        {
            var collection           = GetTestCollection <BsonDocument>();
            BulkWriteContext context = new BulkWriteContext();

            Dictionary <long, Role> Roles = new Dictionary <long, Role>();

            for (int i = 0; i < 100; i++)
            {
                var role = new Role {
                    RoleID = i, RoleName = i.ToString()
                };
                for (int itemIndex = 0; itemIndex < 50; itemIndex++)
                {
                    role.Items.Add(itemIndex, new Item {
                        ItemID = itemIndex, ItemUID = itemIndex
                    });
                }
                role.ClearDirty();
                Roles.Add(i, role);
                context.Insert((BsonDocument)role);
            }
            context.Execute(collection);
            context.Clear();

            Stopwatch watch = new Stopwatch();

            List <ReplaceOneModel <BsonDocument> > replaces = new List <ReplaceOneModel <BsonDocument> >();

            watch.Start();
            foreach (var pair in Roles)
            {
                replaces.Add(new ReplaceOneModel <BsonDocument>(new BsonDocument {
                    { "_id", pair.Key }
                }, (BsonDocument)pair.Value));
            }
            collection.BulkWrite(replaces);
            watch.Stop();
            var time1 = watch.ElapsedMilliseconds;

            watch.Reset();

            for (int i = 0; i < 100; i++)
            {
                Roles[i].RoleName += i;
                for (int itemIndex = 0; itemIndex < 10; itemIndex++)
                {
                    Roles[i].Items[itemIndex].ItemID += 1;
                }
                Roles[i].Items.Add(51, new Item {
                    ItemID = 51, ItemUID = 51
                });
            }

            UpdateContext update = new UpdateContext();

            watch.Start();
            foreach (var pair in Roles)
            {
                update.Clear();
                pair.Value.Update(update);
                context.Update(new BsonDocument {
                    { "_id", pair.Key }
                }, update.Build());
            }
            context.Execute(collection);
            context.Clear();
            watch.Stop();
            var time2 = watch.ElapsedMilliseconds;

            Assert.IsTrue(time1 > time2);
        }
예제 #9
0
        public void TestBulkWriteRoles()
        {
            var collection = GetTestCollection <BsonDocument>();

            Dictionary <long, Role> Roles = new Dictionary <long, Role>();

            for (int i = 0; i < 100; i++)
            {
                var role = new Role {
                    RoleID = i, RoleName = i.ToString(), Inserted = true
                };
                for (int itemIndex = 0; itemIndex < 50; itemIndex++)
                {
                    role.Items.Add(itemIndex, new Item {
                        ItemID = itemIndex, ItemUID = itemIndex
                    });
                }
                Roles.Add(i, role);
            }

            UpdateContext    update  = new UpdateContext();
            BulkWriteContext context = new BulkWriteContext();

            foreach (var pair in Roles)
            {
                if (pair.Value.Inserted)
                {
                    context.Insert((BsonDocument)pair.Value);
                }
                else
                {
                    update.Clear();
                    pair.Value.Update(update);
                    context.Update(new BsonDocument {
                        { "_id", pair.Key }
                    }, update.Build());
                }
                pair.Value.ClearDirty();
                pair.Value.Inserted = false;
            }
            context.Execute(collection);
            update.Clear();
            context.Clear();

            for (int i = 0; i < 100; i++)
            {
                Roles[i].RoleName += i;
                Roles[i].Items.Add(51, new Item {
                    ItemID = 51, ItemUID = 51
                });
            }
            Roles.Add(100, new Role {
                RoleID = 100, Inserted = true
            });

            foreach (var pair in Roles)
            {
                if (pair.Value.Inserted)
                {
                    context.Insert((BsonDocument)pair.Value);
                }
                else
                {
                    update.Clear();
                    pair.Value.Update(update);
                    context.Update(new BsonDocument {
                        { "_id", pair.Key }
                    }, update.Build());
                }
                pair.Value.ClearDirty();
                pair.Value.Inserted = false;
            }
            context.Execute(collection);
            update.Clear();
            context.Clear();
        }