我正在开始使用 RethinkDB,但在理解我正在运行的某些查询的情况时遇到了一些困难。
问题是从公开 JSON API 的 NodeJS 应用(使用 rethinkdbdash 驱动程序)查询日期时间类型的对象。如果我单独查询我的对象,如下所示:
db.table('apples').max('timestamp');
我获取时间戳字段的 JavaScript 日期,而如果我在查询中运行分组运算符,如下所示:
db.table('apples').group('type').max('timestamp');
我得到了相同时间戳字段的日期时间伪类型(我认为这是正确的名称)。像这样的东西:
{
"$reql_type$": "TIME",
"epoch_time": 1423077646.772,
"timezone": "-07:00"
}
这是预期的行为吗?其背后的逻辑是什么?
我想在 JSON 中返回序列化的 iso8601 日期,而不是此数据类型,以使解析对客户端透明。
谢谢
<小时/>更新 这是 2.2.7 之前版本的已知问题。 Fixed here .
最佳答案
这看起来像是 rethinkdbdash 中的一个错误。服务器始终将时间作为伪类型(带有 $reql_type$
字段的对象)发送到客户端,客户端负责将伪类型转换为 native 时间对象(因为不同语言的驱动程序必须以不同的方式执行此操作)。我会在https://github.com/neumino/rethinkdbdash/issues打开一个错误.
我猜这个错误的来源是 group
返回 GROUPED_DATA
伪类型和 rethinkdbdash 无法正确转换其他伪类型内部的伪类型。如果你运行db.table('apples').group('type').max('timestamp').ungroup()
,这可能会解决此查询的问题,直到修补驱动程序为止。
关于rethinkdb - 使用组运算符时使用时间伪类型而不是 ISO8601,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34068959/