欢迎投稿

今日深度:

MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关(2)


 

二、包含“子集合”的集合操作

同样举个例子:有一个学校人事管理系统要统计班级和学生的信息,现在定义了一个“班级集合”,这个集合里面的学生字段是一个“学生集合”,包含了本班全部学生。

1) linq方式实现

基础配置我就不多说了,数据类定义如下:

  1. /// <summary>    
  2. /// 班级信息    
  3. /// </summary>    
  4. public class ClassInfo    
  5. {    
  6.     public string ClassName { get; set; }    
  7.     public List<Student> Students { get; set; }    
  8. }    
  9. /// <summary>    
  10. /// 学生信息    
  11. /// </summary>    
  12. public class Student    
  13. {    
  14.     public string Name { get; set; }    
  15.     public int Age { get; set; }    
  16. }   
  17.  

查询叫“张三”的学生在哪个班级,以及他的详细信息:

(这里其实是ToList后在内存中查的,linq方式直接查询好像驱动不支持。)

  1. public List<ClassInfo> Select()    
  2. {    
  3.    return mongoCollection.Linq().ToList().Where(x => x.Students.Exists(s => s.Name == "张三")).ToList();    
  4. }   
  5.  

 1) 普通实现

查询叫“张三”的学生在哪个班级,以及他的详细信息:

  1. public List<Document> Select()    
  2. {    
  3.    var mongocollection = mongoDatabase.GetCollection("ClassInfo");    
  4.    return mongocollection.Find(new Document { { "Students.Name""张三" } }).Documents.ToList();    
  5. }   
  6.  

打印数据的BJSON:

  1. "_id""4d814bae5c5f000000005f63""ClassName""1001""Students": [ { "Name""张三""Age": 10 }, { "Name""李四""Age": 0 } ] }    
  2. "_id""4d814bae5c5f000000005f64""ClassName""1002""Students": [ ] }    
  3. "_id""4d814bae5c5f000000005f65""ClassName""1003""Students": [ { "Name""王五""Age": 11 }, { "Name""赵六""Age": 9 } ] }   
  4.  

三、小结

通过本节例子我们发现,MongoDB有它独特的文档结构可以描述数据对象之间的一些关系特征。它虽然没有关系型数据库多表符合查询那样强大的表间查询方式,但也可以通过文档结构描述更灵活的关系特性,可以这么说,关系型数据库能做的,MongoDB基本上也可以做到。甚至有些关系数据库不容易做到的,MongoDB也可以轻松做到,比如,描述数据类的继承关系等


www.htsjk.Com true http://www.htsjk.com/shujukujc/18905.html NewsArticle 二、包含子集合的集合操作 同样举个例子:有一个学校人事管理系统要统计班级和学生的信息,现在定义了一个班级集合,这个集合里面的学生字段是一...
评论暂时关闭