2

我在亚马逊海王星中使用 Gremlin。我有顶点用户,国家,订单
我有从用户到国家的边缘'lives_in',从用户到订单的边缘'购买',从订单到国家的边缘'交付'

目标:找到向外国购买最多订单的最多国家而不是比 live_in country 按降序排列

gremlin> g.V().hasLabel("user").outE('purchased').inV().hasLabel("order"). 
......1> outE("delivered").inV().hasLabel("country").
......2> has('name').neq(outE('lives_in').inV().hasLabel("country").values()).
......3> groupCount().by(values)

我无法从步骤 neq(outE("lives_in")) 遍历回到根顶点
删除最后一个 has 步骤后我得到相同的结果

gremlin> g.V().hasLabel("user").outE('purchased').inV().hasLabel("order").
......1> outE("delivered").inV().hasLabel("country")

这意味着我的最后一步没有执行。
结果样本 - {v[country_GB]=38,v[country_NZ]=6,v[country_AU]=3}

4

1 回答 1

4

在您的问题中包含这样的小样本图总是有帮助的:

g.addV('user').as('u1').
  addV('user').as('u2').
  addV('order').as('o1').
  addV('order').as('o2').
  addV('order').as('o3').
  addV('order').as('o4').
  addV('order').as('o5').
  addV('order').as('o6').
  addV('country').property('name','usa').as('usa').
  addV('country').property('name','candada').as('can').
  addV('country').property('name','mexico').as('mex').
  addE('lives_in').from('u1').to('usa').
  addE('lives_in').from('u2').to('mex').
  addE('purchased').from('u1').to('o1'). 
  addE('purchased').from('u1').to('o2').
  addE('purchased').from('u1').to('o3').
  addE('purchased').from('u1').to('o4').
  addE('purchased').from('u2').to('o5').
  addE('purchased').from('u2').to('o6').
  addE('delivered').from('o1').to('usa').
  addE('delivered').from('o2').to('mex').
  addE('delivered').from('o3').to('mex').
  addE('delivered').from('o4').to('can').
  addE('delivered').from('o5').to('mex').
  addE('delivered').from('o6').to('can').iterate()

基于此,这是您可以执行此操作的一种方法:

gremlin> g.V().hasLabel("user").as('u').
......1>   out('lives_in').hasLabel("country").as('c'). 
......2>   select('u').
......3>   out('purchased').hasLabel("order").
......4>   out("delivered").hasLabel("country").
......5>   where(neq('c')).
......6>   groupCount().
......7>     by('name')
==>[mexico:2,candada:2]

需要注意的几点:

  1. 如果您没有对边缘做任何事情,请分别简化和inE().outV()outE().inV()in()out()
  2. 在标记为 1 的行,标记了“lives_in”国家顶点,以便稍后与第 5 行的“交付”国家进行比较
  3. 结果不包括标有“o1”的订单和标有“o5”的订单,因为这两个订单都源自它们发货的国家/地区。
于 2018-02-14T14:08:46.973 回答