Gremlin 小精灵:递归求和

Gremlin 小精灵:递归求和,gremlin,graph-databases,Gremlin,Graph Databases,给出一组简单的传销数据: g.addV('user').property('id', 1).as('1') addV('user').property('id', 2).as('2'). addV('user').property('id', 3).as('3'). addV('user').property('id', 4).as('4'). addV('user').property('id', 5).as('5'). addV('user').property('id'

给出一组简单的传销数据:

g.addV('user').property('id', 1).as('1')
  addV('user').property('id', 2).as('2').
  addV('user').property('id', 3).as('3').
  addV('user').property('id', 4).as('4').
  addV('user').property('id', 5).as('5').
  addV('user').property('id', 6).as('6').
  addV('user').property('id', 7).as('7').
  addV('point').property('value', 5).as('p1')
  addV('point').property('value', 5).as('p2').
  addV('point').property('value', 5).as('p3').
  addV('point').property('value', 5).as('p4').
  addV('point').property('value', 5).as('p5').
  addV('point').property('value', 5).as('p6').
  addV('point').property('value', 5).as('p7').
  addE('sponsors').from('1').to('2').
  addE('sponsors').from('1').to('3').
  addE('sponsors').from('1').to('4').
  addE('sponsors').from('2').to('5').
  addE('sponsors').from('3').to('6').
  addE('sponsors').from('4').to('7').
  addE('hasPoints').from('1').to('p1').
  addE('hasPoints').from('2').to('p2').
  addE('hasPoints').from('3').to('p3').
  addE('hasPoints').from('4').to('p4').
  addE('hasPoints').from('5').to('p5').
  addE('hasPoints').from('6').to('p6').
  addE('hasPoints').from('7').to('p7').
  iterate()
如何生成以下JSON:

{
  "1": x,
  "2": y,
  "3": z,
  ...
}

其中1/2/3是用户ID,x/y/z是用户点和所有赞助用户点的总和(即,user1的点是他下所有用户的递归总和-u2+u3+u4+u5+u6+u7,user2/3/4等).

您可以通过按
id
和分值总和对用户进行分组来实现这一点

g.V().hasLabel('user')
  group().by(id).
    by(repeat(out()).
      emit(hasLabel('point')).values('value').sum())

示例:

该查询非常有效:)您知道如何获取每个用户的总和,但基于某个谓词,从用户的总和中排除总和吗?例如:-user1有子项2、3、4。user1的总和是u2+u3+u4。-基于谓词(例如,如果u2的总和超过5个点),将其从u1的计算中排除,因此现在仅为u3+u4。-最终目标是获得u1的总分(不包括u2的总分)。我面临的困难是递归计算(即首先获取u2的总数,对照谓词检查并从u1中排除)。这不是一个简单的问题。我想你应该用一个更复杂的例子来回答另一个问题,你想完成什么谢谢,这是有道理的。