Gremlin:递归求和

时间:2020-04-16 08:28:09

标签: gremlin graph-databases

给出一个简单的MLM数据集:

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等相同)。

1 个答案:

答案 0 :(得分:0)

您可以通过按id将用户和得分值的总和分组来实现此目的

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

示例:https://gremlify.com/6j