繁体   English   中英

Mongoid:与关系有关的归还文件?

[英]Mongoid: Return documents related to relation?

假设我正在模拟学生,课程和老师。 如果一个学生上了很多课,那么我怎么找到他们所有102级的老师呢? 因此,我将如何找到他们所有课程的老师? 现在,我有这个:

s = Mongoid::Student.find_by(name: 'Billy')
l = s.lessons.where(level: 102)
t = l.map { |lesson| lesson.teachers }.flatten

有没有办法将后两行变成一个查询?

每个集合至少需要一个查询,在一个查询中无法访问多个集合(即没有JOIN),所以这是您能做到的最好的。 但是,这:

t = l.map { |lesson| lesson.teachers }.flatten

正在进行l.length查询,以使每堂课的老师。 您可以通过收集课程中的所有老师ID来清理它:

teacher_ids = l.map(&:teacher_ids).flatten.uniq # Or use `inject` or ...

然后根据这些ID抓住老师:

t = Teacher.find(teacher_ids)
# or
t = Teacher.where(:id.in => teacher_ids).to_a

如果所有这些查询都不适合您,那么您就不得不对某些东西进行非规范化,以便将所需的所有内容都嵌入到一个集合中。 当然,这意味着您必须在情况发生变化时维护副本,并定期检查副本是否存在一致性问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM