Gremlin:获得遍历的边缘

时间:2018-03-27 10:26:28

标签: gremlin

示例数据:TinkerPop Modern

必需的数据格式

{'relation': '['created']', 'id': [10224, 10220], 'title': ['Marko', 'lop']}
{'relation': '['knows', 'created']', 'id': [10224, 10226, 10222], 'title': ['Marko', 'Josh', 'ripple']}
{'relation': '['knows', 'created']', 'id': [10225, 10224, 10220], 'title': ['Vadas', 'Marko', 'lop']}
{'relation': '['knows', 'knows', 'knows', 'created']', 'id': [10225, 10224, 10226, 10222], 'title': ['Vadas', 'Marko', 'Josh', 'ripple']}
{'relation': '['created']', 'id': [10226, 10220], 'title': ['Josh', 'lop']}
{'relation': '['created']', 'id': [10226, 10222], 'title': ['Josh', 'ripple']}
{'relation': '['created']', 'id': [10227, 10220], 'title': ['Peter', 'lop']}
{'relation': '['created', 'knows', 'created']', 'id': [10227, 10220, 10226, 10222], 'title': ['Peter', 'lop', 'Josh', 'ripple']}

查询:

g.V().hasLabel("Person").as("from")
.repeat(both().as("to").dedup("from", "to"))
.emit(hasLabel("Software"))
.hasLabel("Software")
.project("title", "relation", "id")
.by(path().by("name"))
.by(constant("r"))
.by(path().by(id()))

问题:

我找不到一种方法来获取遍历的边缘以获得结果Vertex。任何出路?我尝试了两个E()。bothV(),但不仅限于遍历

2 个答案:

答案 0 :(得分:1)

首先,您必须使用bothE().otherV()而不是both()来遍历边缘。但是,这也会改变路径,因此您需要在查询中调整更多内容:

g.V().hasLabel("person").as("from","v").
  repeat(bothE().as("e").otherV().as("v").dedup("from", "v")).
    emit(hasLabel("software")).
  hasLabel("software").
  project("title", "relation", "id").
    by(select(all, "v").unfold().values("name").fold()).
    by(select(all, "e").unfold().label().fold()).
    by(select(all, "v").unfold().id().fold())

答案 1 :(得分:-1)

PipeFunction" enablePath()"应该为你这样做。见文档。