【问题标题】:How to find parent vertex of two child vertices with condition in GREMLIN?如何在GREMLIN中找到两个有条件的子顶点的父顶点?
【发布时间】:2020-12-01 06:51:53
【问题描述】:

我有以下图表:

          V1
       /  |  \
      p1  p2  p3

如果我有 p1 和 p3 顶点匹配 GREMLIN 中的条件,我想找到父顶点 (V1)。 对于单亲,我有大约 25 个子节点。我需要找到与条件匹配的任何子顶点的父节点。

例如:如果 P1、P2、P3 顶点具有以下属性 - 名称、值。 我需要找到类似的父顶点:

SELECT 
   V1
WHERE 
       P1.name = 'a' and P1.value = 'b'
   AND P3.name = 'x' and P3.value = 'y'

(或)

SELECT 
   V1
WHERE 
       P2.name = 'p' and P2.value = 'q'
   AND P3.name = 'x' and P3.value = 'y'

【问题讨论】:

  • 对此的快速提问。你的边缘是否会有从父母到孩子的方向?父顶点是否会被标记为“父”,而子顶点是否会被标记为“子”?
  • 是的。我确实有从父母到孩子的“有”优势。父顶点的标签为“父”,所有子顶点都具有“子”标签以及属性。

标签: gremlin amazon-neptune


【解决方案1】:

解决这个问题的最佳方法是强制(任意选择一个子顶点开始)。

这是此类查询的最简单形式:

g.V().has('Child','name','p1').in('HAS').where(out('HAS').has('name','p2'))

该查询的结果将是V1

【讨论】:

  • 感谢 Taylor 的轮班响应。是的,我目前正在以完全相同的方式进行操作。但只是想一想,如果从每个子顶点到父顶点来回移动是昂贵的遍历。
  • 命令式方法实际上非常有效,因为您尽可能少地接触图中的组件。一旦您加载数据以查看性能特征的确切情况,对 Neptune 的 /gremlin/profile API 端点运行它会很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多