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

如何在一条Gremlin-Python查询语句中获取两个顶点ID?

问题分析与解决方案

错误原因

你的查询报错是因为**node2_id_prop10标签绑定的是节点ID的字符串值,而非node2节点本身**,后续用.by(T.id)尝试对字符串执行节点ID获取操作,而T.id仅支持图元素(节点/边),无法作用于字符串类型,因此触发TokenTraversal support of java.lang.String does not allow selection by id错误。

修正后的查询

以下是调整后的Gremlin查询,可正确获取包含两个节点ID的键值对列表:

g.V().hasLabel('node1')
    .as('node1', 'prop1', 'prop2', 'prop3', 'prop4', 'prop5', 'prop6', 'prop7', 'prop9')
    .inE('edge').outV().hasLabel('node2').as('node2')
    .select('prop1', 'prop2', 'prop3', 'prop4', 'prop5', 'prop6', 'prop7', 'prop9',
            'node1_id', 'node2_id')
    .by('prop1').by('prop2').by('prop3').by('prop4').by('prop5')
    .by(values('prop6').fold()).by('prop7').by('prop9')
    .by(select('node1').id())
    .by(select('node2').id())
    .toList()

关键调整点

  1. 保留节点引用:将node1和node2分别用as('node1')、as('node2')绑定,而非提前取出ID字符串。
  2. 正确获取ID:在select阶段,通过select('node1').id()和select('node2').id()从节点引用中提取ID,避免类型不匹配。
  3. 简化标签结构:无需为节点ID单独设置冗余标签,直接通过节点引用关联获取。

另一种简洁写法

如果希望结构更清晰,也可以用project来组织节点属性和ID:

g.V().hasLabel('node1').as('node1')
    .inE('edge').outV().hasLabel('node2').as('node2')
    .project('node1_props', 'node2_id')
    .by(project('prop1', 'prop2', 'prop3', 'prop4', 'prop5', 'prop6', 'prop7', 'prop9', 'node1_id')
         .by('prop1').by('prop2').by('prop3').by('prop4').by('prop5')
         .by(values('prop6').fold()).by('prop7').by('prop9').by(id()))
    .by(id())
    .toList()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:10:31