Gremlin查询总和2个或更多值

Ale*_*nea 4 gremlin

我需要编写一个gremlin查询,它可以对一组顶点上的2个或多个属性求和,并将它们作为单独的值返回.

声明1:

g.V().has('label1').values('p1').sum()
Run Code Online (Sandbox Code Playgroud)

这将返回所有'label1'顶点的p1值之和 - 假设为100

声明2:

g.V().has('label1').values('p2').sum()
Run Code Online (Sandbox Code Playgroud)

这将返回所有'label1'顶点的p2值之和 - 假设为200

声明3:

g.V().has('label1').values('p1','p2').sum()
Run Code Online (Sandbox Code Playgroud)

试过上面的声明,但正如预期的那样,它不会起作用,它将返回300,'label1'的所有p1和p2属性的总和

我需要一个查询,它将返回p1的总和,并在一个结果中返回总和p2.也许有一种方法可以"折叠"或将一组顶点折叠成一个顶点并通过某些规则聚合属性......在我的情况下为sum.

Dan*_*itz 6

您可以按键对所有值进行分组:

g.V().has("label1").properties("p1","p2").
  group().by(key).by(value().sum())
Run Code Online (Sandbox Code Playgroud)

编辑

证明它有效:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV().property("p1", 1).property("p2", 10).iterate()
gremlin> g.addV().property("p1", 2).property("p2", 20).iterate()
gremlin> g.V().properties("p1", "p2").group().by(key).by(value().sum())
==>[p1:3,p2:30]
Run Code Online (Sandbox Code Playgroud)


Ale*_*nea 2

根据丹尼尔的原始答案,这是为我解决问题的查询:

g.V().has('label1').union(values('p1').sum(), values('p2').sum())
Run Code Online (Sandbox Code Playgroud)