IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]MongoDB C# Driver 使用示例 (2.2)

    csharp25发表于 2015-12-08 11:21:58
    love 0
    项目update到了mongoDB C# driver 2.2 , 发现从1.9到2.0的变化还是很大的,整合了一些常用的操作附加demo代码:

      class Program
        {
            const string CollectionName = "video";
            static void Main(string[] args)
            {
                // remove the demo collection then recreate later
                db.GetCollection<Video>(CollectionName).Database.DropCollection(CollectionName);
    
    
                var videos = new List<Video>
                {
                    new Video { Title="The Perfect Developer", 
                                Category="SciFi", Minutes=118 },
                    new Video { Title="Lost In Frankfurt am Main", 
                                Category="Horror", Minutes=122 }, 
                    new Video { Title="The Infinite Standup", 
                                Category="Horror", Minutes=341 } 
                };
    
    
                Console.WriteLine("Insert Videos ...");
    
    
                db.GetCollection<Video>(CollectionName).InsertMany(videos);
    
    
                Console.WriteLine("[After insert] All Videos : ");
                var all = db.GetCollection<Video>(CollectionName).Find(x=>x.Title != string.Empty).ToList();
                foreach (var v in all)
                {
                    Console.WriteLine(v);
                }
    
    
                Console.WriteLine("Group By...");
    
    
                var groupby = db.GetCollection<Video>(CollectionName).Aggregate()
                        .Group(x => x.Category, g => new {Name = g.Key, Count = g.Count(), TotalMinutes = g.Sum(x => x.Minutes)})
                        .ToList();
                foreach (var v in groupby)
                {
                    Console.WriteLine(v.Name + "," + v.Count + "," + v.TotalMinutes);
                }
    
    
    
    
                Console.WriteLine("Updating One [Title = The Perfect Developer]...");
    
    
                // updating title with "The perfect developer" video's 'title' and 'minute'
                db.GetCollection<Video>(CollectionName).FindOneAndUpdate(x=>x.Title == "The Perfect Developer",
                        Builders<Video>.Update.Set(x=> x.Title , "A Perfect Developer [updated]")
                                              .AddToSet(x => x.Comments, "good video!")
                                              .AddToSet(x => x.Comments, "not bad"));
    
    
                Console.WriteLine("[After Updating One] All Videos : ");
                all = db.GetCollection<Video>(CollectionName).Find(x => x.Title != string.Empty).ToList();
                foreach (var v in all)
                {
                    Console.WriteLine(v);
                }
    
    
                Console.WriteLine("Deleting One... [Minutes = 122]");
                db.GetCollection<Video>(CollectionName).DeleteOne(x => x.Minutes == 122);
                Console.WriteLine("[After Deleting One] All Videos : ");
                all = db.GetCollection<Video>(CollectionName).Find(x => x.Title != string.Empty).ToList();
                foreach (var v in all)
                {
                    Console.WriteLine(v);
                }
    
    
                Console.Read();
            }
    
    
            private static IMongoDatabase db
            {
                get
                {
                    var url = new MongoUrl(ConfigurationSettings.AppSettings["mongoUrl"]);
                    var client = new MongoClient(url);
                    return client.GetDatabase(url.DatabaseName);
                }
            }
        }
    
    
        [BsonIgnoreExtraElements]
        public class Video
        {
            public Video()
            {
                Comments = new List<string>();
            }
    
    
            [BsonId]
            [BsonRepresentation(BsonType.ObjectId)]
            public string Id { get; set; }
    
    
            public string Title { get; set; }
            public string Category { get; set; }
            public int Minutes { get; set; }
    
    
            public IList<string> Comments { get; set; }
    
    
            public override string ToString()
            {
                return string.Format("{0} - {1} - {2}", Title, Category, Minutes);
            }
        }
    





    对于mongoDB C# driver从1.9到2.0的更新,简化了数据库的连接方式,简化了Find,Update,Delete的接口,group by和projection操作也更流畅了。
    在Builders<T>中整合了 update, filter, projection, 和sort,功能的内聚性更强了,找function很方便。


沪ICP备19023445号-2号
友情链接