我有一个相当简单的mongodb模型 目前有2个系列 学生 课程(嵌入科目)
class Student < User
include Mongoid::Document
has_many :courses
class Course
include Mongoid::Document
belongs_to :student
embeds_many :subjects
我知道mongoid不支持直接查询has_many 即。
Student.courses
所以,如果我想获得学生科目,这是唯一的方法
@student = Student.first
Course.find(@student.courses).subjects
目前有3个查询
MOPED: 127.0.0.1:27017 QUERY database=test collection=users selector= {"$query"=>{"_type"=>{"$in"=>["Student"]}}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (1.1775ms)
MOPED: 127.0.0.1:27017 QUERY database=test collection=courses selector={"student_id"=>"51f09457b5b605db25000002"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.8862ms)
MOPED: 127.0.0.1:27017 QUERY database=test collection=courses selector={"_id"=>"51f09457b5b605db25000003"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.8380ms)
有更有效的方法吗? 我知道我可以在课程中嵌入课程,但我也会直接查询课程集。
答案 0 :(得分:6)
试试这个。
Subject.where(:course_id.in => @student.courses.map(&:id))