使用组运算符时时间伪类型而不是 ISO8601
Time pseudotype instead of ISO8601 when using group operator
我刚开始使用 RethinkDB,我在理解某些查询时遇到了一些问题,我正在 运行ning。
问题是从 NodeJS 应用程序 (使用 rethinkdbdash 驱动程序) 查询具有日期时间类型的对象,它公开了 JSON API。如果我像这样单独查询我的对象:
db.table('apples').max('timestamp');
我得到 JavaScript 时间戳字段的日期,而如果我 运行 在查询中按运算符分组,如:
db.table('apples').group('type').max('timestamp');
我得到了相同时间戳字段的日期时间伪类型(我认为这是正确的名称)。类似于:
{
"$reql_type$": "TIME",
"epoch_time": 1423077646.772,
"timezone": "-07:00"
}
这是预期的行为吗?其背后的逻辑是什么?
我想 return 在我的 JSON 中序列化 iso8601 日期而不是这种数据类型以使解析对客户透明。
谢谢,
更新
这是 2.2.7 之前版本的已知问题。 Fixed here.
这看起来像是 rethinkdbdash 中的错误。服务器总是将时间作为伪类型(具有 $reql_type$
字段的对象)发送给客户端,客户端负责将伪类型转换为本地时间对象(因为不同语言的驱动程序必须以不同的方式执行此操作)。我会在 https://github.com/neumino/rethinkdbdash/issues 上打开一个错误。
我猜错误的来源是 group
returns 一个 GROUPED_DATA
伪类型和 rethinkdbdash 没有正确转换其他伪类型中的伪类型。如果您 运行 db.table('apples').group('type').max('timestamp').ungroup()
,这可能会解决此查询的问题,直到驱动程序被修补。
我刚开始使用 RethinkDB,我在理解某些查询时遇到了一些问题,我正在 运行ning。
问题是从 NodeJS 应用程序 (使用 rethinkdbdash 驱动程序) 查询具有日期时间类型的对象,它公开了 JSON API。如果我像这样单独查询我的对象:
db.table('apples').max('timestamp');
我得到 JavaScript 时间戳字段的日期,而如果我 运行 在查询中按运算符分组,如:
db.table('apples').group('type').max('timestamp');
我得到了相同时间戳字段的日期时间伪类型(我认为这是正确的名称)。类似于:
{
"$reql_type$": "TIME",
"epoch_time": 1423077646.772,
"timezone": "-07:00"
}
这是预期的行为吗?其背后的逻辑是什么?
我想 return 在我的 JSON 中序列化 iso8601 日期而不是这种数据类型以使解析对客户透明。
谢谢,
更新 这是 2.2.7 之前版本的已知问题。 Fixed here.
这看起来像是 rethinkdbdash 中的错误。服务器总是将时间作为伪类型(具有 $reql_type$
字段的对象)发送给客户端,客户端负责将伪类型转换为本地时间对象(因为不同语言的驱动程序必须以不同的方式执行此操作)。我会在 https://github.com/neumino/rethinkdbdash/issues 上打开一个错误。
我猜错误的来源是 group
returns 一个 GROUPED_DATA
伪类型和 rethinkdbdash 没有正确转换其他伪类型中的伪类型。如果您 运行 db.table('apples').group('type').max('timestamp').ungroup()
,这可能会解决此查询的问题,直到驱动程序被修补。