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

求助:如何用GraphQL+-查询两人共同好友?需实现图交集操作

解决GraphQL+-中两人共同好友的交集查询问题

嘿,我懂你现在的困扰——分开查两个人的好友列表很简单,但要取交集就卡壳了对吧?在Dgraph的GraphQL+-里,我们可以用变量存储集合或者嵌套过滤+@cascade这两种方式来实现,下面给你详细拆解:

方法一:用变量存储好友UID,再取交集

这种方法逻辑直白,先分别把两人的好友UID存进临时变量,再用uid_in函数取两个集合的交集:

query getCommonFriends {
  # 存储Catarina的所有好友UID
  var(func: eq(name, "Catarina")) {
    CatarinaFriends as friend {
      uid
    }
  }
  # 存储Michael的所有好友UID
  var(func: eq(name, "Michael")) {
    MichaelFriends as friend {
      uid
    }
  }
  # 查询同时出现在两个好友集合里的节点
  common_friends(func: uid_in(CatarinaFriends, MichaelFriends)) {
    name
  }
}

这里的var关键字用来定义临时变量,uid_in会精准返回同时存在于两个UID集合中的节点,也就是两人的共同好友。

方法二:嵌套过滤+@cascade(更紧凑的写法)

如果你想写得更简洁,可以用嵌套查询结合@cascade指令,它会自动过滤掉不满足嵌套条件的节点:

query getCommonFriends {
  common_friends(func: eq(name, "Catarina")) @cascade {
    # 只保留同时是Michael好友的节点
    friend @filter(uid_in(func: eq(name, "Michael") { friend { uid } })) {
      name
    }
  }
}

@cascade的作用是:只有当Catarina的某个好友,同时也是Michael的好友时,这个节点才会被保留下来,最终结果就是两人的共同好友列表。

小提醒

如果你的好友关系是双向的(比如A加了B为好友,B也加了A),那上面两种方法都能正常工作;如果是单向关系,要确保friend边的方向和你数据中的存储逻辑一致哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:39:58