【问题标题】:Date in Mongoid queriesMongoid 查询中的日期
【发布时间】:2012-03-24 14:21:57
【问题描述】:

我有一个模型:

class SimpleAction
  include Mongoid::Document
  field :set_date, :type => Date

我收集了一些数据:

{ "_id" : ObjectId("4f6dd2e83a698b2518000006"), "name" : "丢失", “笔记”:“”,“set_date(1i)”:“2012”,“set_date(2i)”:“3”, “设置日期(3i)”:“25”,“设置日期(4i)”:“13”,“设置日期(5i)”:“57”, “持续时间”:15,“待办事项”:“4”}

您可以在五个字段中看到 mongoid 存储日期 - set_date(ni)。

我有两个问题:

  • 如何在 mongo 控制台客户端中按 set_date 字段过滤数据?像这样的:

    db.simple_actions.find({ set_date : { "$lte" : new Date() } })
    

    我的查询没有返回任何数据。

  • 如何在 Rails 控制器中按 set_date 字段过滤数据?像这样的:

    @simple_actions = SimpleAction.where(:set_date => { '$lte' => Date.today })
    

【问题讨论】:

    标签: ruby-on-rails mongodb mongoid


    【解决方案1】:

    我建议不要使用Date,而是使用DateTime

    field :set_date, :type => DateTime
    

    现在它不仅会存储在 1 个字段中,如下所示:

    "set_date" : ISODate("2012-03-14T17:42:27Z")
    

    但 Mongoid 会正确处理您想要的查询的各种转换:

    SimpleAction.where( :set_date => { :$lte => Date.today } )
    

    【讨论】:

    • 嗯.. 我更改了模型定义并在集合中插入了新的记录器,但没有任何改变。
    • 这里是表单片段:
    • 你能更具体地说明“没有改变”吗?显然 DateTime 是与日期不同的字段类型,是吗? :)
    • 对于纯实验,我通过'rails g scaffold Testing set_date:datetime'创建了新模型、控制器和视图。然后我创建了记录并在 mongodb 上查看它们 - set_date 字段由 5 个部分组成。我已将时间类型更改为 DateTime,创建了另外 2 条新记录并在 mongodb 上查看它们 - 新记录在 set_date 字段 (set_date(ni)) 上有五段。
    • Rails - 3.2.1,Mongoid - 2.4.6。这是 datetime_select 帮助程序问题。我已将其更改为 text_field 并且一切正常。
    【解决方案2】:

    您可以将它与 Time 类一起使用。

    当您将日期从移动设备发送到 Api 时,Rails 非常适合用于移动设备(例如 Android)的 Api:1482723520。(last_created=1482723520)

    你可以这样使用它:

     time = Time.at(params[:last_created].to_i)
    

    在 Rails 中你可以这样查询:

    Number.where(created_at:  { :$gte => time })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      相关资源
      最近更新 更多