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

how to print all result from Gremlin traversal

我有一个拓扑,它是 aws_vpc<------(作文)------测试---(成员资格)---->位置

所以我使用查询

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

到select它,但是如何打印所有元素的名称, 我想输出:test, membership, location, composition, aws_vpc.

有办法实现吗?

您编写了一个遍历,它仅检测“测试”顶点是否具有具有相邻“位置”顶点的传出“成员资格”边或具有相邻“aws_vpc”顶点的传出“组合”边,所以所有的遍历将 return 是匹配该过滤器的“测试”顶点。它不只是“select”。事实上,一旦单个 __.out("membership").hasLabel("location")__.out("composition").hasLabel("aws_vpc") 按照提供给 or() 的顺序 returned,or() 就会立即得到满足,因此您不必'甚至遍历所有这些路径(这对于过滤操作来说是一件好事)。

如果您想要return您描述的所有数据,您需要以这样的方式编写查询以便遍历所有数据并将其转换为return的格式。在您的情况下,一种简单的方法是使用 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 数据,可以放入相关的“成员资格”和“组合”键中.