Gremlin组数量,顺序和限制

问题描述

我目前正在将gremlin与AWS neptune集群一起使用,并使用nodejs进行开发。通过共同的兴趣计数,我找到了兴趣和顺序相同的朋友。我需要将结果限制在前2位。

const res = await g.V().has('user','name','Waruna').as('u')
    .out('like').in_('like')
    .where(P.neq('u'))
    .valueMap()
    .by(gremlin.process.statics.unfold())
    .groupCount()
    .order(gremlin.process.scope.local)
    .by(gremlin.process.column.values,gremlin.process.order.desc)
    .limit(2)
    .toList();
console.log('RESULTS',res);

结果:

RESULTS [
  Map {
    Map { 'name' => 'Dimuthu','age' => 30 } => 2,Map { 'name' => 'Kamal','age' => 25 } => 1,Map { 'name' => 'Amal','age' => 34 } => 1,Map { 'name' => 'Dhanushka','age' => 40 } => 1,Map { 'name' => 'Sunimal','age' => 28 } => 1
  }
]

尽管我将查询限制为2,但它不起作用。结果是所有节点。

解决方法

groupCount步骤之后,您基本上创建了一个单一的地图结构。因此limit(2)不执行任何操作,因为该映射被视为一个实体。如果在unfold()之前添加limit(2),则应该只会得到两个结果。请记住,如果groupCount创建的地图可能会变大,您可能需要考虑更快地过滤结果的方法。或者,您可以使用limitlimit(local,2)步骤提供本地作用域。