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

Mongoose与MongoDB实现按国家分组查询关联用户的方法咨询

你当前写的聚合里用的$in是条件查询运算符,不能在$group阶段作为累加器使用,自然得不到想要的结果。正确的聚合管道写法如下:

Post.aggregate([
  // 1. 按国家分组,收集对应国家的所有用户名
  {
    $group: {
      _id: "$country",
      users: { $addToSet: "$user" }
    }
  },
  // 2. 合并所有分组结果,组装为键值对数组
  {
    $group: {
      _id: null,
      countryList: {
        $push: {
          k: "$_id",
          v: "$users"
        }
      }
    }
  },
  // 3. 转换为目标格式的对象作为输出根节点
  {
    $replaceRoot: {
      newRoot: { $arrayToObject: "$countryList" }
    }
  }
])

说明

  • 第一步$group阶段:以country字段为分组依据,$addToSet会把同一个国家下的用户名收集为无重复的数组,如果允许重复用户名可以把$addToSet替换为$push。
  • 第二步$group阶段:把上一步的所有国家分组合并为一个大组,将国家作为键、对应用户列表作为值组装成键值对数组。
  • 第三步$replaceRoot阶段:通过$arrayToObject把键值对数组转换为你需要的「国家为键、用户列表为值」的对象,直接作为最终输出的根结构。

运行后得到的输出格式为:

[ { Mexico: [ 'Kim', 'Darren', 'Joe' ], USA: [ 'Bob' ] } ]

如果你需要将用户列表从数组转为Set集合,拿到查询结果后自行遍历转换即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:04