如何打印Gremlin遍历的所有结果

问题描述

我有一个拓扑,它是 aws_vpc 位置

所以我使用查询

graph.traversal().V().hasLabel("test").or(
                    __.out("membership").hasLabel("location"),__.out("composition").hasLabel("aws_vpc"))

选择它,但是如何打印所有元素的名称, 我想输出:测试,成员资格,位置,组成,aws_vpc。

有没有办法做到这一点?

解决方法

您已编写了一个遍历,该遍历仅检测“测试”顶点是否具有与相邻“位置”顶点相邻的传出“成员资格”边缘或与相邻“ aws_vpc”顶点相邻的传出“组成”边缘,因此所有遍历都将返回是与该过滤器匹配的“测试”顶点。除此之外,它不会“选择”任何东西。实际上,一旦按提供给or()的顺序返回了单个__.out("membership").hasLabel("location")__.out("composition").hasLabel("aws_vpc"),就会立即满足or()的需求,因此您甚至不必遍历所有对象这些路径(对于过滤操作来说是一件好事)。

如果要返回描述的所有数据,则需要编写查询以遍历所有查询并将其转换为返回格式。在您的情况下,执行此操作的一种简单方法是使用project()

g.V().hasLabel('test').
  project('data','memberships','compositions').
    by(__.elementMap()).
    by(__.outE("membership").as('e').
          inV().hasLabel("location").as('v').
          select('e','v').
            by(elementMap()).
          fold()).
    by(__.outE("composition").as('e').
          inV().hasLabel("aws_vpc").as('v').
          select('e','v').
            by(elementMap()).
          fold())

这将获取每个“测试”顶点,并使用三个键将其转换为Map:“数据”,“成员资格”和“竞争”,然后每个by()调制器都指定如何处理当前的“测试”顶点将被转换并将其放置在相应的键中。请注意,我选择了select()来获取边线和顶点组合,但是如果您愿意的话,也可能是project()的一步。密钥以fold()结尾,以便将每个“测试”顶点的边缘数据流减少为List个数据,这些数据可以放入相关的“成员身份”和“组成”密钥中