我需要编写一个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。
答案 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())