Mongodb 无法按datatime equal查询

Mongodb 无法按datatime equal查询,mongodb,mongoid,Mongodb,Mongoid,员工无法查询。其中:年=>Date.strptime2014,%Y 但我可以用:year.gte得到结果,但我认为它应该是由相等的运算器进行的查询 Staff.create( year: Date.strptime(@year,"%Y"), ) Staff.where(:year => Date.strptime("2014","%Y") 当你说: field :year, type: Time Date.strptime("2014","%Y") 在M

员工无法查询。其中:年=>Date.strptime2014,%Y

但我可以用:year.gte得到结果,但我认为它应该是由相等的运算器进行的查询

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

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

field :year, type: Time
Date.strptime("2014","%Y")
在Mongoid模型中,您将得到完整的时间戳年、月、日、小时。。。在MongoDB内部。当你说:

field :year, type: Time
Date.strptime("2014","%Y")
在Ruby中,您实际上正在构建日期2014-01-01。当您使用该日期查询时间字段时,该日期将转换为2014-01-01T00:00:00时间戳,因此您实际上是这样做的:

Staff.where(:year => DateTime.parse('2014-01-01T00:00:00'))
假设您的年份字段中没有任何2014-01-01T00:00:00时间戳,因此查询不会找到任何内容

如果您切换到:year.gte,那么您将查找2014-01-01T00:00:00或之后的年份时间戳,即2014年、2015年……的任何时间戳

我怀疑您的“年份”字段的名称不正确或键入不正确。如果这真的只是一年,那么它应该是:

field :year, type: Integer
您可以通过以下方式查询:

Staff.where(:year => 2014)

在2014年取得成功。如果它真的应该是一个时间戳,那么你最好把它称为某物,因为某物取决于你真正跟踪的时间,你通常会使用范围操作符(如$gte和$lte)来查询它。

字段:年,类型:时间