我在 Rails 中使用 Cequel。我想查询类似
Event.where("started_at >?", Time.now)
在活动记录中。但我不知道如何在 cequel 中做到这一点。
我在 Rails 中使用 Cequel。我想查询类似
Event.where("started_at >?", Time.now)
在活动记录中。但我不知道如何在 cequel 中做到这一点。
为了对时间戳执行有效的范围查询,您需要将事件分组在父对象下,并将其started_at
用作集群列(主键中的最后一列)。因此,例如,如果活动属于场所,您可以设置如下内容:
class Venue
include Cequel::Record
key :id, :uuid, auto: true
column :name, :text
has_many :events
end
class Event
include Cequel::Record
belongs_to :venue
key :started_at, :timeuuid
column :ended_at, :timestamp
column :title, :text
end
这意味着您可以在开始时间范围内有效地执行查询。需要注意的几点:
started_at
关键是 TimeUUID 以确保唯一性。TimeUUIDs 封装了一个时间戳,可以跨时间范围查询belongs_to
声明。它描述了父/子关系。因此,要创建一个事件,您需要执行以下操作:
venue.events.new(started_at: Cequel.uuid(started_at), ended_at: ended_at)
然后按开始时间查询一系列事件:
venue.events.after(Time.now)
请注意,您不能通过任意列进行范围查询——只能通过对主键中的列进行聚类。因此,例如,您不能拥有允许查询start_time
和 end_time
的表。
谢谢你超时。但我找到了一个通过提供哈希值范围进行查询的解决方案。答案是
Event.where(started_at: Time.now..Time.now+30.minutes)