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

如何在单次Gremlin查询中获取边及两端顶点的elementMaps?

解决Amazon Neptune中关联顶点与边的elementMap查询需求

环境

  • Node 16
  • Gremlin for JavaScript
  • Amazon Neptune数据库

需求

列出所有Customer标签顶点与Workstream标签顶点间的HAS边,同时返回边和关联顶点的elementMap(),期望输出格式为:

[{
    edge: {
      // 边的elementMap内容
      outV: { // 出顶点的elementMap内容 },
      inV: { // 入顶点的elementMap内容 }
     }
 }]

现有问题

之前的查询要么只返回顶点/边的基础对象(不带完整属性),要么只能拿到边的elementMap但关联顶点信息缺失;另外对边执行elementMap()后,关联顶点的键会从outV/inV变成OUT/IN,不符合预期格式。

解决方案查询语句

通过嵌套project和map步骤,直接组合出期望的格式,同时保留dedup处理重复顶点的逻辑:

g.V().has('Customer', 'name', 'Customer')
  .dedup().by('name')
  .as('outV')
  .outE('HAS')
  .as('edge')
  .inV().hasLabel('Workstream')
  .as('inV')
  .select('edge', 'outV', 'inV')
  .map(
    __.project('edge')
      .by(
        __.merge(select('edge').elementMap())
          .with(__.project('outV', 'inV')
            .by(select('outV').elementMap())
            .by(select('inV').elementMap())
          )
      )
  )
  .toList()

说明

  1. 重复顶点处理:保留你原有的dedup().by('name')逻辑,避免名称重复的Customer顶点被多次遍历
  2. 格式定制:通过merge把边的elementMap内容和手动指定的outV/inV字段合并,确保输出结构完全符合预期,同时避免默认elementMap中边的关联顶点键变为OUT/IN的问题
  3. 属性完整性:所有顶点和边的属性都会通过elementMap()完整返回,不再出现properties: undefined的情况

示例输出

返回结果结构如下:

[{
  edge: {
    id: '74c24101-55a9-3421-029b-1ddd68178cfd',
    label: 'HAS',
    // 边的其他属性
    outV: {
      id: 'bac24101-555a-e70b-66b1-434c5b2bb4fe',
      label: 'Customer',
      name: 'Customer',
      // Customer顶点的其他属性
    },
    inV: {
      id: 'b8c24101-5548-f39e-70c9-a9bd126e05b2',
      label: 'Workstream',
      // Workstream顶点的其他属性
    }
  }
}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:35:25