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

如何用MongoDB聚合管道将匹配的嵌套邀请元素提至顶层?

解决方法

你需要通过几个聚合阶段实现嵌套字段提取和结构转换,具体管道步骤如下:

  1. $match:先筛选出包含目标用户邀请记录的群组文档(注意字段名大小写,你原代码里写的recipientAccountID和文档结构里的recipientAccountId不一致,需要修正)
  2. $unwind:将invites数组拆分为单个文档,每个数组元素对应一条独立的聚合结果
  3. $match:再次过滤,只保留当前邀请记录中收件人是目标用户的条目(避免保留同群组内其他用户的邀请)
  4. $project:重构文档结构,将原文档_id重命名为groupId,并保留senderAccountId和recipientAccountId

完整聚合代码:

db.groups.aggregate([
    // 筛选存在目标用户邀请的群组
    {
        $match: {
            "invites.recipientAccountId": "<user-id>"
        }
    },
    // 拆分invites数组为单个文档
    {
        $unwind: "$invites"
    },
    // 仅保留目标用户作为收件人的邀请记录
    {
        $match: {
            "invites.recipientAccountId": "<user-id>"
        }
    },
    // 投影成需要的顶层结构
    {
        $project: {
            _id: 0,
            groupId: "$_id",
            senderAccountId: "$invites.senderAccountId",
            recipientAccountId: "$invites.recipientAccountId"
        }
    }
])

执行后会得到符合需求的结果数组,示例如下:

[
    {
        "groupId": "g123",
        "senderAccountId": "a456",
        "recipientAccountId": "<user-id>"
    },
    // 其他符合条件的邀请记录
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:15:12