[英]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.