You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gremlin查询:获取指定用户每位好友的最高评分review边

问题原因

你原来的查询是先取出所有好友的全部review边之后做全局排序,没有按好友维度做分组筛选,所以会返回每个好友的所有review。

解决方案

你需要对每一位好友节点单独处理其review边,按value降序排序后仅取第一条即可,需要用到Gremlin的匿名遍历__.来做局部处理,调整后的代码如下:

首先确认你已经引入了Gremlin的匿名遍历对象:

import * as __ from 'gremlin/lib/process/traversal';
// 替换为你项目实际对应的gremlin包引入路径

修改后的查询逻辑:

async function init() {
  const query = g
    .V(6) // 直接传入用户ID定位,等价于原写法V().hasId(6)
    .out("friend") // 直接out("friend")等价于outE("friend").inV(),写法更简洁
    .hasLabel("user")
    .map( // 对每个好友节点单独处理其评论
      __.outE("review")
        .order()
        .by("value", "desc") // 按评分降序排列
        .limit(1) // 仅取最高评分的第一条
    );

  const dataRaw = await query.toList();
  await dc.close();
  const data = JSON.stringify(normalizeData(dataRaw as any), null, 1);
  console.log(data);
}

补充说明

  • 如果有好友没有发布过任何review,上面的查询会自动过滤掉该好友,如果你需要保留无review的好友,可以把limit(1)替换为fold().coalesce(__.unfold(), __.constant(null))
  • 如果你同时需要返回好友的基础信息和对应的最高评分review,可以把map替换为project,示例:
.project("friendInfo", "topReview")
.by(__.valueMap(true))
.by(__.outE("review").order().by("value", "desc").limit(1).valueMap(true).fold())

内容的提问来源于stack exchange,提问作者plutolaser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:06:03