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

MongoDB find反向匹配查询:筛选双向互赞的关系记录

双向点赞匹配记录查询实现

你当前的点赞关系存储结构下,要筛选出所有存在双向互赞的记录,可通过MongoDB聚合管道实现,逻辑和代码如下:

实现逻辑

  • 为每条点赞记录生成统一的配对标识:将from和to的用户ID按固定规则(比如字典序排序)拼接成唯一键,互赞的两条反向记录会生成完全相同的配对键
  • 按配对键分组,统计每个配对下的记录量,同时保留组内所有原始文档
  • 过滤掉记录量不足2的分组,仅保留存在双向点赞的配对
  • 将分组内的原始记录拆分还原,输出和原集合结构一致的结果

可直接运行的聚合代码

假设你的存储集合名为user_likes,执行以下聚合语句即可得到预期结果:

db.user_likes.aggregate([
  {
    $addFields: {
      pairKey: {
        $cond: {
          if: { $lt: ["$from", "$to"] },
          then: { $concat: ["$from", "|", "$to"] },
          else: { $concat: ["$to", "|", "$from"] }
        }
      }
    }
  },
  {
    $group: {
      _id: "$pairKey",
      likeCount: { $sum: 1 },
      matchRecords: { $push: "$$ROOT" }
    }
  },
  {
    $match: {
      likeCount: 2
    }
  },
  {
    $unwind: "$matchRecords"
  },
  {
    $replaceRoot: {
      newRoot: "$matchRecords"
    }
  }
])

注意事项

如果你的业务存在同一用户对另一用户重复点赞的场景(即单方向存在多条相同from、to的记录),需要将分组后的匹配条件调整为「组内去重后的from用户数量为2」,避免单方向重复点赞被误判为双向匹配。

用你给出的示例数据执行上述语句,输出结果和预期完全一致:

[
  {"from":"_id1", "to":"_id2"},
  {"from":"_id2", "to":"_id1"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:48:22