C#-对MongoDB进行查询
使用c#对MongoDB进行查询
//创建约束生成器
FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
ProjectionDefinitionBuilder<BsonDocument> builderProjection = Builders<BsonDocument>.Projection;
ProjectionDefinition<BsonDocument> projection = builderProjection.Include( "HangerID" ).Include("StyleNo").Exclude( "_id" );
List<BsonDocument> result = dal.mongo.db.GetCollection<BsonDocument>("Hangers").Find<BsonDocument>( builderFilter.Empty ).Project<BsonDocument>( projection ).ToList();
Dictionary<string, int> res = result.GroupBy( x => x["StyleNo"].ToString() ).Select( x => new {
StyleNo = x.Key,
Count = x.Count()
} ).OrderByDescending(x=>x.Count).Take(5).ToDictionary( x => x.StyleNo, x => x.Count );
//创建约束生成器
FilterDefinitionBuilder<TEntity> builderFilter = Builders<TEntity>.Filter;
SortDefinitionBuilder<TEntity> builderSort = Builders<TEntity>.Sort;
ProjectionDefinitionBuilder<TEntity> builderProjection = Builders<TEntity>.Projection;
ProjectionDefinition<TEntity> projection = builderProjection.Combine( projectionList );
SortDefinition<TEntity> sort = builderSort.Combine( sortList );
FilterDefinition<TEntity> filter = builderFilter.And( filterList );var result = helper.collection<TEntity>().Find<TEntity>( filter ).Project( projection ).ToList();
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);
}