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

如何从MongoDB多文档的对象数组中获取去重值?

嘿,要从多个MongoDB文档的Data数组里提取去重的Client值,用聚合框架就能完美解决,我给你分享两种实用方法:

方法1:使用$unwind + $group(兼容大部分MongoDB版本)

这是最经典的实现方式,思路是先把数组拆分为独立文档,再通过分组自动去重:

db.collection.aggregate([
  // 将每个文档的Data数组拆分成单个独立文档
  { $unwind: "$Data" },
  // 按Data.Client字段分组,自动实现去重
  { $group: { _id: "$Data.Client" } },
  // 可选:将分散的去重结果整理为一个友好的数组格式
  { $group: { _id: null, uniqueClients: { $push: "$_id" } } },
  { $project: { _id: 0, uniqueClients: 1 } }
])

说明:前两步已经能得到所有去重的Client值,最后两步是把单个的结果文档合并成一个包含所有去重值的数组,方便一次性查看。

方法2:使用$reduce + $setUnion(MongoDB 3.4+,更高效)

如果不想拆分数组(避免生成大量中间文档),可以用数组操作符直接处理,性能更优:

db.collection.aggregate([
  // 先提取每个文档中Data数组里的所有Client值,形成单独的数组
  { $project: { clients: "$Data.Client" } },
  // 合并所有文档的clients数组,同时用$setUnion保证无重复值
  { $group: {
      _id: null,
      uniqueClients: {
        $reduce: {
          input: "$clients",
          initialValue: [],
          in: { $setUnion: ["$$value", "$$this"] }
        }
      }
    }
  },
  { $project: { _id: 0 } }
])

说明:$setUnion本身就会返回两个数组的并集(自动去重),配合$reduce可以逐个合并所有文档的Client数组,最终得到全局去重的列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:59:19