假设我在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:我知道有很多帖子都有类似的标题,但我很困惑!
答案 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}});