在 Gremlin 中是否可以从内部步骤获取 select 数据

Is it possible in Gremlin to select data from inner steps

我有案例

我需要 select node_1,它有一些优势,或者 select 只是一个 node_1 本身

traversal()
        .V().hasLabel("label_1")
        .has("property_key", P.within(numbers)).as("node_1")
        .or(
                __.bothE().hasLabel("label_2").dedup().as("rels").otherV().as("node_2"),
                __.constant(true)
        )
        .project("n1","r", "n2")
        .by(__.select("node_1"))
        .by(__.coalesce(__.unfold().select("rels"), __.unfold()))
        .by(__.coalesce(__.unfold().select("node_2"), __.unfold()))
        .toList()

但结果,当我观看 rels 时,有一个 node_1。 而在一个node_2中,还有一个node_1

您可以看到:

我猜是因为gremlin在步骤结构中找不到relsnode_2

但在图中 - 存在这样的顶点和边

所以如果我写的一样没有“或”

traversal()
        .V().hasLabel("label_1")
        .has("property_key", P.within(numbers)).as("node_1")
        .bothE().hasLabel("label_2").dedup().as("rels").otherV().as("node_2")
        .project("n1","r", "n2")
        .by(__.select("node_1"))
        .by(__.select("rels"))
        .by(__.select("node_2"))
        .toList()

我得到了结果

如你所见

我明白,在第一种情况下,__.unfold() 被触发,所以我们得到了 node_1 无处不在

但是我如何获得 relsnode_2 - 我无法理解

是否有任何解决方案可以从 or 步骤

获取步骤

或者也许还有其他解决方案

"node_1" + "rels" + "node_2"

或仅查找

"node_1" + default_value + default_value

仅使用一个查询

感谢回答!

P.S.

这里有一些文本可以更好地在 google 中搜索,我在搜索答案时使用了这些查询,从浏览器历史记录中获取它:

gremlin select 从 or 开始, gremlin select 内部步骤, gremlin select 步骤, gremlin select 内部步骤名称, gremlin select 乘以步骤名称, 里面的 gremlin or

过滤器内部没有从以下位置到 select() 的路径:

gremlin> g.inject(1,2,3).as('a').or(__.is(1).as('b'),__.is(2).as('c')).path()
==>[1]
==>[2]
gremlin> g.inject(1,2,3).as('a').filter(__.is(1).as('b')).path()
==>[1]

您实际上需要让 Gremlin 遍历一条路径才能将其添加到历史记录中。我不确定我是否遵循了您要执行的操作,但我认为您可以将整个遍历的结构简化为:

g.V().hasLabel("label_1").
  has("property_key", P.within(numbers)).
  coalesce(bothE("label_2").elementMap(),
           identity())

这样,您的条件由 coalesce() 处理,每条边都得到 returned。如果您需要 return 两个顶点上的数据,您显然可以用更强大的东西替换 elementMap() - 也许只需用 project() 变体替换它。