Gremlin groupCount、order 和 limit

Gremlin groupCount, order and limit

我目前正在将 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) 什么都不做,因为该地图被视为一个实体。如果您在 limit(2) 之前添加 unfold(),您应该只会得到两个结果。请记住,如果 groupCount 创建的地图有可能变大,您可能需要考虑更快地过滤结果的方法。作为替代方案,您可以使用 limit(local,2).

limit 步骤本地范围