使用组运算符时的时间假型而不是ISO8601

时间:2015-12-03 14:48:15

标签: rethinkdb rethinkdb-javascript

我已经开始使用RethinkDB了,我在理解正在运行的一些查询时遇到了什么问题。

问题是从NodeJS应用程序(使用rethinkdbdash驱动程序)查询具有日期时间类型的对象,该应用程序公开了JSON API。如果我单独查询我的对象,如:

db.table('apples').max('timestamp');

我获取时间戳字段的JavaScript日期,而如果我在查询中运行group by运算符,如:

db.table('apples').group('type').max('timestamp');

我得到相同时间戳字段的日期时间假型(我认为这是正确的名称)。类似的东西:

{
  "$reql_type$": "TIME",
  "epoch_time": 1423077646.772,
  "timezone": "-07:00"
}

这是预期的行为吗?它背后的逻辑是什么?

我想在我的JSON中返回序列化的iso8601日期而不是此数据类型,以使解析对客户端透明。

感谢,

更新 对于2.2.7之前的版本,这是一个已知问题。 Fixed here

1 个答案:

答案 0 :(得分:2)

这看起来像是rethinkdbdash中的一个错误。服务器总是将时间作为假型(具有$reql_type$字段的对象)发送给客户端,并且客户端负责将假型转换为本机时间对象(因为不同语言的驱动程序必须以不同方式执行此操作)。我在https://github.com/neumino/rethinkdbdash/issues打开了一个错误。

我猜这个bug的来源是group返回一个GROUPED_DATA假型,而rethinkdbdash没有正确转换其他假型内的假型。如果您运行db.table('apples').group('type').max('timestamp').ungroup(),则可能会修复此查询的问题,直到修补驱动程序。