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

MongoDB查询适配:likes集合用户存储改为数组后的互赞查询修改

适配MongoDB users数组结构的互赞用户聚合查询

直接上修改后的聚合查询代码:

.collection('likes')
.aggregate([
  // 匹配包含目标用户且点赞状态为true的文档
  {$match: {users: userId, like: true}},
  // 分组收集所有发起点赞的用户(users数组第一个元素)和被点赞的用户(第二个元素)
  {$group: {
      _id: 0,
      from: {$addToSet: {$arrayElemAt: ["$users", 0]}},
      to: {$addToSet: {$arrayElemAt: ["$users", 1]}},
    }
  },
  // 取交集并过滤掉当前用户,得到最终互赞用户列表
  {$project: {
      _id: 0,
      users: {
        $filter: {
          input: {$setIntersection: ["$from", "$to"]},
          cond: {$ne: ["$$this", userId]}
        }
      }
    }
  }
])

关键修改点说明:

  1. $match阶段:不再用$or分别匹配原from/to字段,直接通过users: userId匹配数组中包含目标用户的文档,MongoDB会自动识别数组包含指定值的情况,逻辑更简洁。
  2. $group阶段:用$arrayElemAt从users数组中分别提取原from(索引0)和原to(索引1)的用户ID,再用$addToSet收集去重后的列表,和原查询的分组逻辑完全对齐。
  3. $project阶段:和原查询完全一致,因为分组后的from和to集合含义没变,直接取交集再过滤掉当前用户即可得到互赞用户列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:34:50