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

MongoDB多字段分组实现按用户输出单文档的聚合查询问题

解决方案

你只需要在现有$group阶段后追加两次聚合阶段即可,完整查询语句如下:

db.characters.aggregate([
  // 按用户+公会分组,汇总单个公会下的角色列表
  {
    $group: {
      _id: { user: "$user", guild: "$guild" },
      characters: { $push: "$character" }
    }
  },
  // 按用户二次分组,整理所有公会的角色数据为键值对数组
  {
    $group: {
      _id: "$_id.user",
      guildList: {
        $push: {
          k: "$_id.guild",
          v: "$characters"
        }
      }
    }
  },
  // 转换为目标输出结构
  {
    $project: {
      _id: 0,
      user: "$_id",
      characters: { $arrayToObject: "$guildList" }
    }
  }
])

逻辑说明

  1. 第一个$group是你已有的逻辑,得到「用户+公会」维度的角色列表。
  2. 第二个$group把同一个用户的所有公会数据归集,生成格式为[{k: 公会标识, v: 对应角色数组}]的列表。
  3. 最后的$project阶段做两件事:调整字段名输出user字段,用MongoDB内置的$arrayToObject操作符把上面的键值对数组直接转换为目标characters对象结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:27:02