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

Gremlin查询需求:筛选指定用户的关联用户及层级拓展查询

Gremlin查询解决方案:筛选指定层级朋友中居住在目标城市的用户

1. 查找user_1的朋友中居住在chennai的用户

你的原查询走到了城市顶点,所以返回的是城市ID。要返回符合条件的用户,应该在朋友顶点层面做过滤,不用跳转到城市顶点再回溯。推荐两种写法:

写法一:使用where子句(简洁高效)

g.V('user_1').out('friend_of')
  .where(out('lives_in').has('id', 'chennai'))
  .values('id')

逻辑:先获取user_1的所有直接朋友,再筛选出那些lives_in边指向chennai的用户,最后返回用户ID。

写法二:使用match模式(可读性更强)

如果需要更清晰地表达路径关系,可以用match明确匹配"用户-朋友-城市"的路径:

g.match(
  __.V('user_1').as('me'),
  __.as('me').out('friend_of').as('friend'),
  __.as('friend').out('lives_in').has('id', 'chennai').as('city')
).select('friend').values('id')

2. 查找user_1的朋友及朋友的朋友中居住在chennai的用户

要覆盖直接朋友(1层)和朋友的朋友(2层),可以用两种方式实现:

写法一:使用repeat+emit(适合拓展更多层级)

g.V('user_1')
  .repeat(out('friend_of'))
    .emit()
    .times(2) // 限制遍历1-2步,对应朋友和朋友的朋友
  .where(out('lives_in').has('id', 'chennai'))
  .dedup() // 去重,避免同一用户因多条路径重复返回
  .values('id')

逻辑:repeat循环遍历朋友关系,emit()输出每一步的结果(1步和2步的顶点),times(2)限制最多走2步,之后过滤居住在chennai的用户,最后去重。

写法二:使用union合并层级(逻辑更直观)

如果只需要固定的1层和2层,用union直接合并两种路径的结果:

g.V('user_1')
  .union(
    out('friend_of'), // 直接朋友
    out('friend_of').out('friend_of') // 朋友的朋友
  )
  .where(out('lives_in').has('id', 'chennai'))
  .dedup()
  .values('id')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:36:19