如何在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
相关产品推荐
相关产品推荐

