如何编写Gremlin查询判断event_date是否在当前日期30天内?
Gremlin查询:判断event_date是否在当前日期30天范围内
针对你提供的Person节点数据集,以下是两种实用的Gremlin查询方案:
方案1:判断单个节点(id:p1)的日期范围
直接查询指定节点,返回是否处于当前日期前后30天区间的布尔结果:
g.V('p1') .hasLabel('Person') .project('node_id', 'is_in_30day_range') .by(id()) .by( let( __.property('event_date').as('target_date'), currentDate().as('current_date') ).math('current_date - target_date').by('days').as('day_diff') .choose( __.and(gt('day_diff', -30), lt('day_diff', 30)), constant(true), constant(false) ) )
方案2:批量筛选符合条件的所有Person节点
如果需要找出所有event_date在当前30天范围内的Person节点:
g.V() .hasLabel('Person') .where( let( __.property('event_date').as('target_date'), currentDate().as('current_date') ).math('current_date - target_date').by('days').is(between(-30, 30)) )
关键说明
- 日期类型处理:确保
event_date是日期类型而非字符串。如果存储的是字符串(如你的示例中'2023-08-31'),需要先转换为日期对象,可在property('event_date')后添加.map(unfold().toDate())完成转换。 - 时间精度调整:若需要精确到时分秒而非仅日期,将
currentDate()替换为currentTimestamp(),并将by('days')改为by('seconds')(或对应时间单位)。 - 数据库兼容:部分图数据库(如JanusGraph)可能需要使用特定日期函数,例如用
LocalDate.now()替代currentDate()(需提前导入java.time.LocalDate类)。
内容的提问来源于stack exchange,提问作者Akhil
相关产品推荐
相关产品推荐

