我有一个数据库,其中的密钥以UTC格式以ISO 8601格式存储时间,如下所示:
(data:key1)
{ "time": "2023-12-10T10:42:50.277Z" }
(data:key2)
{ "time": "2023-12-15T19:02:40.308Z" }
...
我想以某种方式聚合这些键中的数据,假设我想计算时间介于2023-12-10和2023-12-29之间的键的数量.
Redis在其RediSearch模块中包括FT.AGGREGATE
命令,以及一个APPLY
子命令,其中can be used to transform data使用不同类型的表达式.要将基于字符串的时间转换为数字值,文档中列出的两种转换似乎很好:
101根据数字时间戳值x返回格式化的时间字符串.有关格式化选项,请参阅strftime.不指定FMT相当于%FT%TZ.102与timefmt()相反--使用给定的格式字符串解析时间格式
然而,我找不到一种方法来实现这一点.我首先用FT.CREATE mySearch ON JSON PREFIX 1 data: SCHEMA $.time AS time TEXT
创建一个搜索索引,然后聚合我调用FT.AGGREGATE mySearch "*" APPLY "parsetime(@time, '%G-%m-%dT%H:%M:%S.%fZ')" as numericTime
,对它的响应是:
1) "1"
2) 1) "time"
2) "2023-12-14T20:42:50.277Z"
3) "numericTime"
4) "null" // <- this should be a unix timestamp instead of null
我做错了什么?将这些时间字符串解析为数值的正确方法是什么?