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); }