Gremlin查询总和2个或更多值

时间:2017-06-15 21:42:07

标签: gremlin

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

声明1:

g.V().has('label1').values('p1').sum()

这将返回所有' label1'的p1值的总和。顶点 - 让我们说是100

声明2:

g.V().has('label1').values('p2').sum()

这将返回所有' label1'的p2值的总和。顶点 - 让我们说200

声明3:

g.V().has('label1').values('p1','p2').sum()

尝试了上述声明,但正如预期的那样,它不会起作用,它将返回300,即' label1'

的所有p1和p2属性的总和

我需要一个查询,它将返回p1的总和,并在一个结果中返回总和p2。也许有一种方式我可以“崩溃”#34;或者将一组顶点折叠成一个顶点并通过某些规则聚合属性......在我的例子中为sum。

2 个答案:

答案 0 :(得分:5)

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

g.V().has("label1").properties("p1","p2").
  group().by(key).by(value().sum())

修改

证明它有效:

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]

答案 1 :(得分:1)

根据Daniel的原始答案,这是为我解决的问题:

g.V().has('label1').union(values('p1').sum(), values('p2').sum())