1

我在 Rails 中使用 Cequel。我想查询类似

Event.where("started_at >?", Time.now) 

在活动记录中。但我不知道如何在 cequel 中做到这一点。

4

2 回答 2

1

为了对时间戳执行有效的范围查询,您需要将事件分组在父对象下,并将其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 封装了一个时间戳,可以跨时间范围查询
  • 与 ActiveRecord 不同,模型只能有一个belongs_to声明。它描述了父/子关系。

因此,要创建一个事件,您需要执行以下操作:

venue.events.new(started_at: Cequel.uuid(started_at), ended_at: ended_at)

然后按开始时间查询一系列事件:

venue.events.after(Time.now)

请注意,您不能通过任意列进行范围查询——只能通过对主键中的列进行聚类。因此,例如,您不能拥有允许查询start_time end_time的表。

于 2014-10-14T15:20:24.380 回答
1

谢谢你超时。但我找到了一个通过提供哈希值范围进行查询的解决方案。答案是

Event.where(started_at: Time.now..Time.now+30.minutes)    
于 2014-10-15T03:25:03.740 回答