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

如何使用Gremlin查询在Neptune数据库中获取多个用户的共同好友

如何使用Gremlin查询在Neptune数据库中获取多个用户的共同好友

我懂你现在的需求——想找出同时是A和B(甚至更多用户)的共同好友,而不是他俩所有好友的合集对吧?你之前写的查询确实会返回A的好友加上B的好友,那咱们来调整下逻辑,实现精准的共同好友筛选。

这里给你两种实用的方案,适配不同的场景:

方案一:分组统计法(适配2个及以上用户)

这种方法扩展性很强,不管是2个还是N个用户都能轻松应对,核心思路是统计每个好友被多少目标用户关联,筛选出关联次数等于目标用户数量的好友:

g.V().has('users','id', within('A', 'B')).out('friend_with')
  .groupCount().by('id')
  .unfold()
  .where(select(values).is(eq(2)))
  .select(keys)

逻辑拆解:

  1. 先定位到id为A和B的用户节点
  2. 遍历他们的friend_with关联,拿到所有好友节点
  3. 按好友的id分组统计出现次数(比如同时是A和B好友的人,次数会是2)
  4. 展开统计结果,筛选出次数等于2的条目
  5. 最后提取对应的好友id

如果是3个用户的共同好友,只需要把eq(2)改成eq(3)就行,非常灵活。

方案二:交集法(适合2个用户场景)

如果只是找两个用户的共同好友,用交集的逻辑会更直观,直接取两个用户好友集合的交集:

g.V().has('users','id','A').out('friend_with').id().intersect(
  __.V().has('users','id','B').out('friend_with').id()
)

这种写法逻辑清晰,一眼就能看明白是取A的好友和B的好友的重叠部分,但用户数量多的话嵌套起来会比较繁琐,所以更适合两两查询的场景。

额外补充:

如果不只是要好友id,还需要获取好友的完整属性信息,可以在方案一的基础上稍作修改:

g.V().has('users','id', within('A', 'B')).out('friend_with')
  .groupCount().by('id')
  .unfold()
  .where(select(values).is(eq(2)))
  .select(keys)
  .map(g.V().has('users','id', it))

这样就能拿到每个共同好友的完整节点数据了。

备注:内容来源于stack exchange,提问作者Aditya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:04:32