我在Mongoid4中存储了很多access_tokens。我希望根据令牌的expires_in字段(以秒为单位)和created_at字段(类型为Time )查询所有过期和未过期的令牌。
这两个字段如下所示:
field :created_at, type: Time
field :expires_in, type: Integer我知道我可以像这样按日期查询Doorkeeper::AccessToken.where(created_at: (3.days.ago..Time.now))。
但是如何在一个查询中比较created_at字段和expires_in字段呢?我希望拥有所有访问令牌,其中created_at字段加上来自expires_in的秒数比Time.now更小或更大。这有可能吗?或者我必须遍历所有条目,然后手动选择它们?
发布于 2015-05-02 10:46:01
在这里可以使用Mongoid的MapReduce特性来做一些事情,但是一种简单的方法可能是首先选择最大的expires_in值,然后查询:
Doorkeeper::AccessToken.where(created_at: (3.days.ago..Time.now-max_expires_in))这为您提供了一个已知超出范围的令牌列表。
然后你可以这样做:
Doorkeeper::AccessToken.where(created_at: ((Time.now-max_expires_in)..Time.now))对于较小的列表,您必须手动过滤。
https://stackoverflow.com/questions/29670205
复制相似问题