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

如何在MongoDB中查询两个用户的共同好友?

查询两个用户的共同好友(MongoDB)

嘿,这个需求用MongoDB的聚合管道就能轻松搞定,我给你一步步拆解思路:

首先假设你已经拿到了两个目标用户的ObjectId(比如用户A是ObjectId("5aacd8500d16f81bd56f0e90"),用户B是另一个用户的ObjectId)。核心逻辑很简单:找到同时出现在这两个用户好友列表里的username,也就是统计每个好友被两个用户都添加的情况。

完整聚合查询语句

db.your_friends_collection.aggregate([
  // 第一步:筛选出属于两个目标用户的所有好友记录
  {
    $match: {
      belongs_to_user: {
        $in: [
          ObjectId("用户1的ObjectId"),
          ObjectId("用户2的ObjectId")
        ]
      }
    }
  },
  // 第二步:按好友username分组,统计该好友被添加的次数
  {
    $group: {
      _id: "$username",
      count: { $sum: 1 },
      // 可选:保留关联的用户ID数组,用于验证归属
      linked_users: { $addToSet: "$belongs_to_user" }
    }
  },
  // 第三步:筛选出被两个用户都添加的好友(次数等于2)
  {
    $match: {
      count: 2
    }
  },
  // 第四步:调整输出格式,让结果更直观
  {
    $project: {
      _id: 0,
      common_friend_name: "$_id"
    }
  }
])

各阶段详细解释

  • $match:先缩小数据范围,只获取两个目标用户的好友记录,避免全表扫描,提升查询效率。
  • $group:把同一个username的记录归为一组,用count统计该好友被目标用户添加的次数;linked_users字段可选,用来确认这个好友确实属于两个目标用户。
  • $match:过滤出count等于2的分组,这些就是两个用户的共同好友。
  • $project:调整输出字段名,把默认的_id(也就是好友username)改成更清晰的common_friend_name,同时去掉多余的分组ID。

扩展:如果需要获取共同好友的完整信息

如果你的好友集合里还有更多字段(比如好友的用户ID、头像等),可以在$group阶段保留完整的好友数据,比如添加friend_details: { $first: "$$ROOT" },这样就能拿到该好友的第一条完整记录,方便后续使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:33:12