You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gremlin中判断根节点下属节点为叶节点或中间节点

如何判断根节点下所有可达节点是否为叶节点(Gremlin实现)

核心逻辑

叶节点定义为无出边的节点(即没有指向其他节点的关系),中间节点则存在至少一条出边。基于这个规则,我们可以通过遍历根节点的所有可达节点,统计每个节点的出边数量来判断类型。

实现查询语句

g.V('TESTNX01')
  .repeat(out('HAS_SHRHLDING_PC_TO', 'HAS_VOTING_PC_TO'))
  .emit()
  .project('root_company', 'Shareholder', 'leaf')
    .by(constant('TESTNX01'))
    .by(id())
    .by(outE().count().is(eq(0)).choose(identity(), constant('Y'), constant('N')))

代码解释

  • g.V('TESTNX01'): 定位到根节点TESTNX01
  • repeat(out('HAS_SHRHLDING_PC_TO', 'HAS_VOTING_PC_TO')).emit(): 递归遍历根节点通过HAS_SHRHLDING_PC_TO和HAS_VOTING_PC_TO边可达的所有节点,emit()返回所有遍历到的节点(包含中间节点和叶节点)
  • project(...): 构造目标输出结构
    • by(constant('TESTNX01')): 固定输出根节点ID到root_company字段
    • by(id()): 将当前节点的ID赋值给Shareholder字段
    • by(outE().count().is(eq(0)).choose(identity(), constant('Y'), constant('N'))): 统计当前节点的出边数,若为0则标记为叶节点('Y'),否则标记为中间节点('N')

扩展说明

  • 如果图中存在其他需要纳入遍历的边类型,只需在out()方法中添加对应的边标签即可
  • 该查询自动排除根节点本身,仅返回其下属的可达节点,符合示例输出要求

内容的提问来源于stack exchange,提问作者SDS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:25:59