【发布时间】:2017-11-23 06:15:29
【问题描述】:
我有一个拥有多个会话的用户类。 我想编写一个查询来计算每个用户在特定时间范围内拥有的会话数。
换句话说,我正在寻找一个看起来像这样的查询: User.where(:sessions.date => date1..date2)
解决这个问题的正确方法是什么?
【问题讨论】:
标签: ruby-on-rails mongodb mongoid
我有一个拥有多个会话的用户类。 我想编写一个查询来计算每个用户在特定时间范围内拥有的会话数。
换句话说,我正在寻找一个看起来像这样的查询: User.where(:sessions.date => date1..date2)
解决这个问题的正确方法是什么?
【问题讨论】:
标签: ruby-on-rails mongodb mongoid
我个人使用简单的$gt 和$lt,因为它只允许查询其中一个,当然还有$in 运算符。
# Session seems to be a separate collection
sessions = Session.where(:date => {"$gt" => date1, "$lt" => date2})
User.find(sessions.collect(&:user_id).uniq)
除此之外,您的查询看起来是聚合管道的完美候选者,可以在 Session 查询中从数据库传输更少的数据。
【讨论】: