【问题标题】:Gremlin groupCount, order and limitGremlin groupCount, order and limit
【发布时间】:2020-10-31 13:22:54
【问题描述】:

我目前正在使用带有 aws neptune 集群的 gremlin 并使用 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,但它不起作用。结果是所有节点。

【问题讨论】:

    标签: node.js gremlin graph-databases amazon-neptune


    【解决方案1】:

    groupCount 步骤之后,您基本上创建了一个映射结构。所以limit(2) 什么都不做,因为该地图被认为是一个实体。如果您在limit(2) 之前添加unfold(),您应该只会得到两个结果。请记住,如果groupCount 创建的地图有可能变大,您可能需要考虑尽快过滤结果的方法。作为替代方案,您可以使用limit(local,2) 提供limit 步骤本地范围。

    【讨论】:

    • 谢谢!您的两个解决方案都运行良好。你能给我建议性能优化的解决方案吗?我理解你的担心。如果我有大量数据,groupCount 有可能创建大型地图。有没有其他方法可以避免这个问题?
    • 一种优化可能是最初使用顶点而不是它们的值映射来分组计数。然后只投影出前两个的价值图。
    • 我试过const res = await g.V().has('user', 'name', 'Waruna').as('u') .out('like').in_('like') .where(P.neq('u')) .groupCount() .order(gremlin.process.scope.local) .by(gremlin.process.column.values, gremlin.process.order.desc) .limit(gremlin.process.scope.local, 2) .toList();。但它只给出顶点图。我怎样才能得到它的价值?
    • 如果“groupCount()”返回空地图,您尝试按“.order(gremlin.process.scope.local) .by(gremlin.process.column.values, gremlin.process.order .desc)" 是不是让你崩溃了?
    • 我会针对您的具体问题提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多