我已经开始使用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
答案 0 :(得分:2)
这看起来像是rethinkdbdash中的一个错误。服务器总是将时间作为假型(具有$reql_type$
字段的对象)发送给客户端,并且客户端负责将假型转换为本机时间对象(因为不同语言的驱动程序必须以不同方式执行此操作)。我在https://github.com/neumino/rethinkdbdash/issues打开了一个错误。
我猜这个bug的来源是group
返回一个GROUPED_DATA
假型,而rethinkdbdash没有正确转换其他假型内的假型。如果您运行db.table('apples').group('type').max('timestamp').ungroup()
,则可能会修复此查询的问题,直到修补驱动程序。