使用c#對MongoDB進行查詢(1)


1.BsonDocument對象

    在MongoDB.Bson命名空間下存在一個BsonDocument類,它是MongoDB的文檔對象,代表着MongoDB中不規則數據一條條實體模型。可以使用BsonDocument對不規則數據進行操作,這個類型繼承了IEnumberable<>類,也就是說又將每一個實體模型看做一個集合,我們可以使用下標方式獲取實體模型中的值

     //
        // 摘要:
        //     Gets or sets a value by position.
        //
        // 參數:
        //   index:
        //     The position.
        //
        // 返回結果:
        //     The value.
        public override BsonValue this[int index] { get; set; }
        //
        // 摘要:
        //     Gets or sets a value by name.
        //
        // 參數:
        //   name:
        //     The name.
        //
        // 返回結果:
        //     The value.
        public override BsonValue this[string name] { get; set; }
        //
        // 摘要:
        //     Gets the value of an element or a default value if the element is not found.
        //
        // 參數:
        //   name:
        //     The name of the element.
        //
        //   defaultValue:
        //     The default value to return if the element is not found.
        //
        // 返回結果:
        //     Teh value of the element or a default value if the element is not found.
        [Obsolete("Use GetValue(string name, BsonValue defaultValue) instead.")]
        public virtual BsonValue this[string name, BsonValue defaultValue] { get; }

  2.連接配置

 //連接地址
        private static string conn = "mongodb://192.168.11.51:40000";
        //數據庫名稱
        private static string dbName = "yan";
        //集合名稱
        private static string colName = "Demo";
        //連接服務端
       static  MongoClient client = new MongoClient(conn);
        //獲取指定數據庫
       static IMongoDatabase db = client.GetDatabase(dbName);
        //獲取指定集合   BsonDocument數據庫文檔對象
       static  IMongoCollection<BsonDocument> coll = db.GetCollection<BsonDocument>(colName);

3.插入數據

  var doc = new[]
            {
                new BsonDocument{
                    { "DepartmentName","開發部"},
                    { "People",new  BsonArray
                        {
                            new BsonDocument{ { "Name", "狗娃" },{"Age",20 } },
                             new BsonDocument{ { "Name", "狗剩" },{"Age",22 } },
                              new BsonDocument{ { "Name", "鐵蛋" },{"Age",24 } }
                        }
                    },
                    {"Sum",18 },
                      { "dim_cm", new BsonArray { 14, 21 } }


                },
                 new BsonDocument{
                    { "DepartmentName","測試部"},
                    { "People",new  BsonArray
                        {
                            new BsonDocument{ { "Name", "張三" },{"Age",11 } },
                             new BsonDocument{ { "Name", "李四" },{"Age",34 } },
                              new BsonDocument{ { "Name", "王五" },{"Age",33 } }
                        }
                    }
                     ,
                     { "Sum",4 }
                     ,
                       { "dim_cm", new BsonArray { 14, 21 } }

                },
                  new BsonDocument{
                    { "DepartmentName","運維部"},
                    { "People",new  BsonArray
                        {
                            new BsonDocument{ { "Name", "" },{"Age",20 } },
                             new BsonDocument{ { "Name", "" },{"Age",22 } },
                              new BsonDocument{ { "Name", "" },{"Age",24 } }
                        }
                    },
                     { "Sum",2 },
                       { "dim_cm", new BsonArray { 22.85, 30 } }

                }
            };

            coll.InsertMany(doc);

4.查詢

  4.1 查詢部門是開發部的信息

 //創建約束生成器
            FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
            //約束條件
            FilterDefinition<BsonDocument> filter = builder.Eq("DepartmentName", "開發部");
            //獲取數據
            var result = coll.Find<BsonDocument>(filter).ToList();
            foreach (var item in result)
            {
                //取出整條值
                Console.WriteLine(item.AsBsonValue);
            }

    4.2 獲取Sum大於4的數據

 //創建約束生成器
            FilterDefinitionBuilder<BsonDocument> builderFIlter = Builders<BsonDocument>.Filter;
            //約束條件
            FilterDefinition<BsonDocument> filter = builder.Gt("Sum", 4);
            var result = coll.Find<BsonDocument>(filter).ToList();
            foreach (var item in result)
            {
                //取出整條值
                Console.WriteLine(item.AsBsonValue);
            }

   4.3 And約束  

 //創建約束生成器
            FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
            //約束條件
            FilterDefinition<BsonDocument> filter = builder.And(builder.Gt("Sum", "2"), builder.Eq("DepartmentName", "運維"));
            var result = coll.Find<BsonDocument>(filter).ToList();
            foreach (var item in result)
            {
                //取出整條值
                Console.WriteLine(item.AsBsonValue);
            }

  4.4查詢指定值

  //創建約束生成器
            FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
ProjectionDefinitionBuilder
<BsonDocument> builderProjection = Builders<BsonDocument>.Projection; //Include 包含某元素 Exclude 不包含某元素 ProjectionDefinition<BsonDocument> projection = builderProjection.Include("DepartmentName").Exclude("_id"); var result = coll.Find<BsonDocument>(builderFilter.Empty).Project(projection).ToList(); foreach (var item in result) { //取出整條值 Console.WriteLine(item.AsBsonValue); }

  4.5 排序

 //創建生成器
            FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
            //排序生成器
            SortDefinitionBuilder<BsonDocument> builderSort = Builders<BsonDocument>.Sort;
            //排序約束   Ascending 正序    Descending 倒序
            SortDefinition<BsonDocument> sort = builderSort.Ascending("Sum");
            var result = coll.Find<BsonDocument>(builderFilter.Empty).Sort(sort).ToList();
            foreach (var item in result)
            {
                //取出整條值
                Console.WriteLine(item.AsBsonValue);
            }

  4.6 In查詢

  //創建生成器
            FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
            FilterDefinition<BsonDocument> filter = builderFilter.In("DepartmentName", new[] { "測試部", "開發部" });
            var result = coll.Find<BsonDocument>(filter).ToList();
            foreach (var item in result)
            {
                //取出整條值
                Console.WriteLine(item.AsBsonValue);
            }

   4.7  分頁查詢

 //創建生成器
            FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
            //分頁   Skip 跳過  Limit查詢多少
            var result = coll.Find<BsonDocument>(builderFilter.Empty).Skip(1).Limit(1).ToList();
            foreach (var item in result)
            {
                //取出整條值
                Console.WriteLine(item.AsBsonValue);
            }

  4.8查詢總條目數

 //創建生成器
            FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
            //總條目數
            var result = coll.Find<BsonDocument>(builderFilter.Empty).Count();

  4.9Linq查詢

 //創建生成器//linq
            var result = from y in coll.AsQueryable() select new { DepartmentName = y["DepartmentName"], id = y["_id"] };
            foreach (var item in result)
            {

                Console.WriteLine("DepartmentName:" + item.DepartmentName + "====Id:"+item.id);
            }

   4.10分組查詢

 //創建生成器
            FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
            //分組
            var result = from y in coll.AsQueryable()  group y by  y["DepartmentName"] into s select new { DepartmentName = s.Key, Count = s.Count() };
            foreach (var item in result)
            {

                Console.WriteLine("DepartmentName:" + item.DepartmentName + "====Count:"+item.Count);
            }

  4.11連表查詢

 //linq
            //連表查詢   在這里是自己連自己
            var result = from u in coll.AsQueryable() join o in coll.AsQueryable() on u["_id"] equals o["_id"] select new { DepartmentName1 = u["DepartmentName"], DepartmentName2 = u["DepartmentName"] };
            foreach (var item in result)
            {

                Console.WriteLine("DepartmentName1:" + item.DepartmentName1 + "====DepartmentName2:" + item.DepartmentName2);
            }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM