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
步骤本地范围
我目前正在将 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
步骤本地范围