Gremlin 聚合步骤乘以以下图形步骤

Gremlin 聚合步骤乘以以下图形步骤,gremlin,tinkerpop,Gremlin,Tinkerpop,在执行以下命令时,我在gremlin shell中遇到了一个问题: g.V().hasLabel('FirstLabel').aggregate('nodes') .V().hasLabel('SecondLabel').aggregate('nodes') .cap('nodes') 我的目标是聚合匹配这两个标签的所有节点。我知道我可以通过不同的过滤步骤来实现这一点,但我希望通过聚合来访问节点。 给定的示例将每个对象的.V步骤后的所有内容与firstLabel相乘 如果我有3个带FirstL

在执行以下命令时,我在gremlin shell中遇到了一个问题:

g.V().hasLabel('FirstLabel').aggregate('nodes')
.V().hasLabel('SecondLabel').aggregate('nodes')
.cap('nodes')
我的目标是聚合匹配这两个标签的所有节点。我知道我可以通过不同的过滤步骤来实现这一点,但我希望通过聚合来访问节点。 给定的示例将每个对象的.V步骤后的所有内容与firstLabel相乘

如果我有3个带FirstLabel的节点和3个带Secondlabel的节点,那么结果集将分别给出前3个节点和后3个节点,总共12个节点

不过,我可以在第一次聚合之后使用.limit1来缓解这种情况,但这似乎不是一个好的解决方案


有没有一种方法可以不受限制地只执行一次图形步骤?

我不清楚您的用例,但这似乎可以正常工作:

g.V().hasLabel('FirstLabel', 'SecondLabel').aggregate('nodes').cap('nodes')

我不清楚您的用例,但看起来这样应该可以很好地工作:

g.V().hasLabel('FirstLabel', 'SecondLabel').aggregate('nodes').cap('nodes')

将当前遍历器的数量减少到1。这几乎可以使用任何减少屏障的步骤来完成。请尝试以下示例:

g.V().hasLabel('FirstLabel').aggregate('nodes').cap('nodes').
  V().hasLabel('SecondLabel').aggregate('nodes').cap('nodes')

将当前遍历器的数量减少到1。这几乎可以使用任何减少屏障的步骤来完成。请尝试以下示例:

g.V().hasLabel('FirstLabel').aggregate('nodes').cap('nodes').
  V().hasLabel('SecondLabel').aggregate('nodes').cap('nodes')

当然,这确实为我提供了正确的顶点,但我看到了一个相当重要的问题,即为聚合中找到的每个解决方案乘以图步骤。这些标签是产生问题的一个很好的例子。当然,这确实给了我正确的顶点,但我看到了一个相当重要的问题,即为聚合中找到的每个解决方案乘以图步骤。这些标签是产生问题的一个很好的例子。谢谢,这很有效!但我仍然不明白为什么会出现这个问题。一个简单的屏障步骤代替cap没有效果。我不明白为什么aggregate.cap会将遍历器减少到1关键是使用减少障碍步骤。帽子、折叠、计数等都会工作,因为它们都会导致一个剩余的遍历器。谢谢,这已经工作了!但我仍然不明白为什么会出现这个问题。一个简单的屏障步骤代替cap没有效果。我不明白为什么aggregate.cap会将遍历器减少到1关键是使用减少障碍步骤。盖、折叠、计数等都将起作用,因为它们都会导致一个剩余的遍历器。