MongoDB数据库集合链接

时间:2013-02-11 14:13:43

标签: shell mongodb

假设我在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()

我在某处读过可以链接集合或嵌入它。有没有办法做到这一点?

what have I tried?我尝试了db.students.ensureIndex({'teachers':1})但它不起作用。我也认为这不应该奏效。我不知道该怎么办?

DUPLICATE:我知道有很多帖子都有类似的标题,但我很困惑!

1 个答案:

答案 0 :(得分: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}});