【问题标题】:Gremlin: how can I return vertex and their associated vertex?Gremlin:如何返回顶点及其关联的顶点?
【发布时间】:2018-03-22 17:44:55
【问题描述】:

我需要返回该组中的一些组和人员,如下所示:

Group A
-----Person A
-----Person B
-----Person C

Group B
-----Person D
-----Person E
-----Person F

我怎样才能用 gremlin 做到这一点。它们通过边缘连接到组。

【问题讨论】:

  • 你的架构是什么?
  • 组是顶点,人是顶点,边相连。

标签: gremlin titan janusgraph


【解决方案1】:

在您对 Gremlin 的问题中包含示例图表总是有帮助的,最好将其作为易于粘贴到 Gremlin 控制台的内容,如下所示:

g.addV('group').property('name','Group A').as('ga').
  addV('group').property('name','Group B').as('gb').
  addV('person').property('name','Person A').as('pa').
  addV('person').property('name','Person B').as('pb').
  addV('person').property('name','Person C').as('pc').
  addV('person').property('name','Person D').as('pd').
  addV('person').property('name','Person E').as('pe').
  addV('person').property('name','Person F').as('pf').
  addE('contains').from('ga').to('pa').
  addE('contains').from('ga').to('pb').
  addE('contains').from('ga').to('pc').
  addE('contains').from('gb').to('pd').
  addE('contains').from('gb').to('pe').
  addE('contains').from('gb').to('pf').iterate()

解决您的问题的方法是使用group() 步骤:

gremlin> g.V().has('group', 'name', within('Group A','Group B')).
......1>   group().
......2>     by('name').
......3>     by(out('contains').values('name').fold())
==>[Group B:[Person D,Person E,Person F],Group A:[Person A,Person B,Person C]]

【讨论】:

  • stephen,在这种情况下,是否可以返回所有组,没有“within('Group A','Group B')”和所有组和用户的 valueMap?但同样,用户嵌套在组内。
  • 是否可以使用它们的 valueMap 检索该顶点“组”并将所有带有边缘的顶点嵌套到该组,以及这些顶点的所有 ValueMap?
  • 何不试试看呢? :) 如果您的图表足够小,那么您可以将 has() 使用 within() 替换为简单的 hasLabel("group")。当然,对于小图或大图,您可以将 values('name') 替换为 valueMap()。请注意,如果您在 3.2.x 中使用像 gremlin-python 这样的 GLV,它将无法正确序列化这样的结果,因为返回的 Map 中的键不是字符串。您需要使用包含 GraphSON 3.0 并支持非字符串键的 3.3.x。
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 2023-01-15
  • 2014-09-20
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多