0

如您所见School,我有两个班级。Student我想搜索“学校名称为 bla bla bla 的学生”和“拥有 90 年级以上学生的学校”。我阅读了一些文件,但我有点困惑。

public class School extends BasicDBObject  {
  private int id;
  private String name;
  private String number;
  private List<Student> studentList = new ArrayList<Student>();,

  //getter and setters
}

public class Student extends BasicDBObject{
  private int id;
  private String name;
  private String grade;
  private School school;

  //getter and setters
}
4

1 回答 1

10

MongoDB 不是关系数据库。它不支持连接。要模拟连接,您必须查询第一个集合,获取结果,然后使用一个大型$in查询查询第二个集合,其中填充了第一个查询返回的文档的适用键值。这听起来既缓慢又丑陋,因此应该设计数据库模式来避免它。

对于您的示例,我会将学校名称添加到Student文档中。这将允许通过单个查询满足您的两个用例。

任何来自关系数据库背景的人现在都会说“但那是多余的!你违反了第二范式!”。没错,但规范化是一种特定于关系数据库的设计模式。它不一定适用于面向文档的数据库。那么哪些设计模式适用于面向文档的数据库呢?艰难的召唤。这是一项新技术。我们仍在弄清楚这一点。

于 2013-07-08T00:15:25.987 回答