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

如何用单条Gremlin查询获取指定顶点及其关联层级信息?

单条Gremlin查询实现企业层级多节点属性获取

需求回顾

查询CompanyA时,需一次性获取以下内容:

  • CompanyA自身的部分属性
  • 父节点CompanyY的部分属性
  • 子节点CompanyB/CompanyC/CompanyD的部分属性
  • 顶层父节点CompanyX的部分属性

正确的单条查询实现

基于你当前的图结构(CompanyA节点存储了top_parent_number属性指向CompanyX),可以直接在project的分支中完成顶层父节点的查询,无需拆分两条语句:

g.V().has('name', 'CompanyA')
  .project('current', 'parent', 'children', 'top_parent')
  // 处理当前节点CompanyA的属性,将多值映射转为单值
  .by(
    valueMap(true).unfold()
      .group().by(keys).by(select(values).limit(local, 1))
  )
  // 获取父节点CompanyY的指定属性
  .by(in().valueMap('name','company_id').fold())
  // 获取子节点B/C/D的指定属性
  .by(out().valueMap('name','company_id').fold())
  // 通过CompanyA的top_parent_number属性查找顶层父节点CompanyX
  .by(
    select('current').select('top_parent_number')
      .flatMap(g.V(it).valueMap('name','company_id')
        .unfold().group().by(keys).by(select(values).limit(local, 1))
      ).fold()
  )

关键逻辑说明

  1. current分支:复用你原有的逻辑,将valueMap返回的多值属性(默认是列表格式)处理为单值映射,同时保留节点的ID和标签(valueMap(true))。
  2. parent/children分支:直接沿用原查询的属性提取逻辑,确保结果格式统一。
  3. top_parent分支:
    • 通过select('current')获取已处理好的CompanyA属性集合,提取其中的top_parent_number值;
    • 用flatMap(g.V(it))根据该ID定位顶层父节点;
    • 同样用属性分组处理逻辑将顶层节点的属性转为单值映射,最后用fold()保证结果格式和父/子节点一致(即使只有一个顶层节点也返回列表)。

无直接ID存储时的替代方案

如果你的图结构中没有在CompanyA存储顶层父节点ID,而是需要通过层级遍历找到无父节点的顶层节点,可以用以下写法:

g.V().has('name', 'CompanyA')
  .project('current', 'parent', 'children', 'top_parent')
  .by(valueMap(true).unfold().group().by(keys).by(select(values).limit(local,1)))
  .by(in().valueMap('name','company_id').fold())
  .by(out().valueMap('name','company_id').fold())
  .by(
    repeat(in()).until(__.in().count().is(0))
      .valueMap('name','company_id')
      .unfold().group().by(keys).by(select(values).limit(local,1))
      .fold()
  )

该写法通过repeat(in()).until(__.in().count().is(0))向上遍历,直到找到没有父节点的顶层节点,再提取其属性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:53:22