【问题标题】:How to query embedded document in rails & mongoid如何在 rails & mongoid 中查询嵌入文档
【发布时间】:2015-04-23 17:55:06
【问题描述】:

我有一个班级模型、一个学生模型和一个出勤模型。出勤嵌入到学生中以提高表现。

我想显示班级中所有学生的人数、在校学生人数、缺勤学生人数和出勤率。我是 Mongodb 的新手,我将不胜感激。感谢您的宝贵时间。

class Klass
  include Mongoid::Document
  include Mongoid::Timestamps

  has_and_belongs_to_many :students

  field :name, type: String
end

class Student
  include Mongoid::Document
  include Mongoid::Timestamps

  has_and_belongs_to_many :klasses
  embeds_many :attendances

  field :name, type: String
end

class Attendance
  include Mongoid::Document
  include Mongoid::Timestamps

  embedded_in :student

  field :status, type: Integer # 1 = Present, 2 = Absent
  field :klass_id, type: BSON::ObjectId
end

【问题讨论】:

  • 你能试试我的解决方案,让我知道你在 cmets 中得到了什么吗?
  • 有什么更新吗?它奏效了吗?它解决了你的问题吗?
  • 不,还在为日期问题苦苦挣扎……
  • 试试这个:@class.students.where('attendances.status' => '1', 'attendances.created_at' => {'$gte' => Date.today} ).count :)
  • 很高兴知道这一点! :D

标签: ruby-on-rails mongodb mongoid


【解决方案1】:

你可以试试这些:

@class = Klass.where(name: 'something').first

@total_students = @class.students.count

@present_students = @class.students.where('attendances.status' => '1').count

@absent_students = @class.students.where('attendances.status' => '2').count

@p_s_today = @class.students.where('attendances.status' => '1', 'attendances.created_at' => {'$gte' => Date.today} ).count

@a_s_today = @class.students.where('attendances.status' => '2', 'attendances.created_at' => {'$gte' => Date.today} ).count

【讨论】:

  • @absent_students 也有效...thanx...但是我如何按日期限制它们(今天)
  • "attendances.c_at.gte" => Time.zone.now.beginning_of_day 我添加了这个,但它不起作用
  • @class.students.where('attendances.status' => '1', 'attendences.created_at.gte' => Date.today).count
  • @Murtza,你能试试我的最后一个查询吗?希望这能解决你所有的问题:)
  • @class.students.where("attendances.c_at.gte" => Date.today, "attendances.status" => 1).count 不起作用
【解决方案2】:

我已经通过以下技术解决了我的问题。

@students_present_today = @class.students.where({ attendances: { '$elemMatch' => {status: 1, :created_at.gte => Date.today} } }).count
@students_absent_today = @class.students.where({ attendances: { '$elemMatch' => {status: 2, :created_at.gte => Date.today} } }).count

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2011-06-02
    • 2015-04-27
    • 2011-08-19
    相关资源
    最近更新 更多