如何使用 volt-mongo 查询小于 Volt 中另一个 Time 对象的时间?

How to query for Time less than another Time object in Volt with volt-mongo?

我正在开发一个需要比较时间的 Volt 应用程序。使用如下所示的模型:

class Punchcard < Volt::Model
  field :punchtime
end

我可以使用 Time 对象为打卡时间保存模型实例,并看到它们作为 ISODate() 对象持久保存到 MongoDB 中。目前一切顺利。

当我想使用小于条件从数据库中查询时,我可以看到 Volt 和 volt-mongo 正在转向这个调用:

store.punchcards.where({"punchtime" => {"$lt" => punchtime}}).then...

(其中 "punchtime" 是一个时间对象)到这个 Mongo 查询中:

db.punchcards.find({"punchtime": {"$lt": "2015-07-08T10:25:05-0700"}})

其中 returns 应该没有结果。

当我在保存 Punchcard 模型实例时跟踪插入调用时,我发现 Time 对象未被字符串化:

[INFO] task StoreTasks#save in 11.557ms
with args: "punchcards", ["punchcards", "[]"], {"user_id"=>"925b0eb84bc3d2185d1c693a", "punchtime"=>2015-07-08 16:38:49 -0700, "punch_status"=>"Out", "id"=>"75c1a3c35016d30895d38d28"}

因此,我猜测由于 Time 对象在 find 调用中被字符串化,而不是在保存调用中被字符串化,Mongo 正在对 find 进行字符串比较。

如何使用 Volt 中的 $lt / $gt 和 Time 对象查询 Mongo?

这应该在 master 上修复。试试大师 运行,如果可行请告诉我。

gem 'volt', github: 'voltrb/volt'