【问题标题】:Mongoid query has_manyMongoid 查询 has_many
【发布时间】:2013-07-25 00:39:04
【问题描述】:

我有一个相当简单的 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)

有没有更有效的方法? 我知道我可以在 Student 中嵌入课程,但我也在考虑直接查询课程集合。

【问题讨论】:

    标签: ruby-on-rails mongodb mongoid


    【解决方案1】:

    试试这个。

    Subject.where(:course_id.in => @student.courses.map(&:id))
    

    【讨论】:

    • 这样更好。试图在 .map function() 上查找文档知道那在哪里吗?
    • 从查询的角度来看,使用@student.courses 和@student.courses.map(&:id)) 似乎没有任何区别?有没有
    • Array#map 是一个标准的 Ruby 方法,它遍历一个数组,将每个值传递给块,并将块的返回值收集到一个新数组中。
    • 两次查找。用于查找特定学生所有课程的 ID。一个查询以查找这些课程的主题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2014-05-19
    相关资源
    最近更新 更多