无法按datatime查询

时间:2015-01-12 06:51:24

标签: mongodb mongoid

Staff.where(:year => Date.strptime("2014","%Y")无法查询

但我可以用:year.gte 获得结果,但我认为它可以是相等操作员

的查询
  Staff.create(
      year: Date.strptime(@year,"%Y"),
  )

    Staff.where(:year => Date.strptime("2014","%Y")

1 个答案:

答案 0 :(得分:0)

当你说:

field :year, type: Time

在Mongoid模型中,您最终会在MongoDB中获得完整的时间戳(年,月,日,小时......)。当你说:

Date.strptime("2014","%Y")

在Ruby中,您实际上正在构建日期 2014-01-01。当您使用该日期查询2014-01-01T00:00:00字段时,该日期将转换为Time时间戳,以便您真正这样做:

Staff.where(:year => DateTime.parse('2014-01-01T00:00:00'))

据推测,您的2014-01-01T00:00:00字段中没有year个时间戳,因此查询无法找到任何内容。

如果您切换到:year.gte,那么您正在查找year之后或之后的2014-01-01T00:00:00个时间戳(即2014年,2015年......)。< / p>

我怀疑您的year字段名称错误或输入错误。如果它真的只是一年那么它应该是:

field :year, type: Integer

您可以使用以下内容查询:

Staff.where(:year => 2014)

在2014年得到的东西。如果它真的应该是一个时间戳,那么你最好不要打电话给它something_at(其中&#34;某些东西&#34;取决于你的时间和## 39;真正跟踪)并且您通常使用$gte$lte等范围运算符进行查询。