0

假设我在 mongoDB 中有两个集合

学生:

{_id: 1, name: "sa", teachers:[1,2,3]}
{_id: 2, name: "sb", teachers:[1,3]}

教师:

{_id:1, name: "ta"}
{_id:2, name: "tb"}
{_id:3, name: "tc"}

现在我想通过教师姓名查询学生收藏。像这样:

db.students.find({'teachers.name':"ta"}).count()

我在某处读过可以链接集合或嵌入它。有什么办法吗?

我试过什么?我已经尝试过db.students.ensureIndex({'teachers':1}),但它不起作用。我也觉得应该不行。我不知道该怎么做?

重复:嗯,我知道有很多帖子的标题相似,但我很困惑!

4

1 回答 1

1

您是否研究过如何使用 MongoDB 完成关系模型?

我不确定你为什么认为 ensureindex 会在这里为你做任何事情。没有办法“链接”集合,MongoDB 是一个非关系型数据库。目前也无法将查询定义为使用子选择分别查询两个集合。

在这里嵌入的主要问题是你有一个多对多的关系:

  • 一个学生有很多老师
  • 一个老师有很多学生

这可能会在此处进行更新,从而造成性能不佳的情况。

现在,最好的办法是像这样实际执行 JOIN 客户端:

var teachers = [];
db.teachers.find({'name':"ta"}).forEach(function(doc){ 
    teachers[teachers.legnth-1] = doc._id; 
});
db.students.find({teachers: {$in: teachers}});
于 2013-02-11T14:22:28.153 回答