Gremlin如何将返回的review边与对应餐厅顶点聚合为指定输出结构
Gremlin查询结构调整方案
你当前结果重复是因为查询遍历到每条review边后都会输出一条独立结果,只需要按餐厅维度聚合评论即可,调整后的查询如下:
g.V(26).as("cui") // 筛选出符合条件的卡拉奇餐厅 .inE("serves").outV().hasLabel("restaurant").has("location", "karachi") // 过滤出存在评分≥2的评论的餐厅 .where(__.inE("review").has("value", gte(2))) // 每个餐厅生成一条目标结构的输出 .project("restaurant", "reviews") // 填充餐厅完整信息 .by(elementMap()) // 收集该餐厅所有符合要求的评论,按评分降序排列后收拢为数组 .by(__.inE("review").has("value", gte(2)).order().by("value", desc).elementMap().fold())
关键改动说明
- 用
project()步骤为每个餐厅生成固定结构的输出,避免重复输出餐厅信息 - 用
fold()步骤将同个餐厅的所有评论边收拢为数组,完全匹配你需要的reviews字段格式 - 去除了冗余的
as()标记和select()步骤,简化查询逻辑
如果不需要保留评论边的ID、标签等元信息,只需要评论属性的话,可以把评论部分的elementMap()替换为valueMap(),输出结果会更简洁。
内容的提问来源于stack exchange,提问作者plutolaser
相关产品推荐
相关产品推荐

