如何在node-redis中使用FT.AGGREGATE及Redis parsetime函数
解决Redis FT.AGGREGATE的APPLY与parsetime问题
一、parsetime函数的正确用法与命令报错修复
你执行的命令报错主要有两个原因:
- 语法错误:命令末尾的
date.多了个句号,应该改成date - 缺少日期格式参数:
parsetime需要明确指定输入日期的格式,Redis无法自动识别所有日期字符串格式
正确的命令示例(假设你的@date字段格式是YYYY-MM-DD):
FT.AGGREGATE idx:example * APPLY "parsetime(@date, '%Y-%m-%d')" AS parsed_date
如果你的日期带时间,比如YYYY-MM-DD HH:MM:SS,就把格式改成%Y-%m-%d %H:%M:%S,格式符要和@date的实际格式完全匹配,否则会解析失败。
二、node-redis中FT.AGGREGATE的APPLY步骤实现
node-redis的ft.aggregate方法里,STEPS数组中的APPLY对象需要明确填写expression和as两个字段:
expression:对应Redis命令中APPLY后面的表达式字符串,要把parsetime的完整写法放进去as:对应命令里AS后面的新字段名
完整代码示例:
import { createClient, AggregateSteps } from 'redis'; const redis = createClient(); await redis.connect(); try { const aggregateResult = await redis.ft.aggregate('idx:example', '*', { STEPS: [ { type: AggregateSteps.APPLY, expression: "parsetime(@date, '%Y-%m-%d %H:%M:%S')", // 替换成你的日期格式 as: 'formatted_date' // 自定义新字段名 } ] }); console.log('聚合结果:', aggregateResult); } catch (error) { console.error('执行出错:', error); } finally { await redis.disconnect(); }
注意:如果你的Redis客户端版本较低,可能需要检查AggregateSteps的导出方式,或者直接用字符串'APPLY'代替AggregateSteps.APPLY。
内容的提问来源于stack exchange,提问作者roni
相关产品推荐
相关产品推荐

