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

MongoDB如何按集合语义返回唯一数组列表而非唯一字符串

MongoDB按集合语义对数组去重实现方案

可以实现你需要的按集合语义去重的需求,核心思路是先统一数组元素的顺序,再基于排序后的数组进行分组去重。以下是具体的聚合管道:

db.collection.aggregate([
  // 过滤存在且非空的letters字段
  {
    $match: {
      "letters": { $exists: true, $ne: null }
    }
  },
  // 对letters数组的元素按升序排序,统一相同元素集合的数组格式
  {
    $addFields: {
      sortedLetters: { $sortArray: { input: "$letters", sortBy: 1 } }
    }
  },
  // 以排序后的数组为分组键,实现集合语义去重
  {
    $group: {
      _id: "$sortedLetters"
    }
  },
  // 提取去重后的数组并调整字段名
  {
    $project: {
      _id: 0,
      letters: "$_id"
    }
  },
  // 将所有去重后的数组汇总到一个数组中
  {
    $group: {
      _id: null,
      letters: { $push: "$letters" }
    }
  },
  // 移除冗余的_id字段
  {
    $project: {
      _id: 0
    }
  }
])

各阶段说明:

  • $match:过滤掉letters字段不存在或为null的文档,确保只处理有效数据。
  • $addFields:使用$sortArray操作符对每个letters数组的元素按升序排序,这样元素集合相同但顺序不同的数组会被转换成完全一致的格式(比如["b","a"]会变成["a","b"])。
  • $group:以排序后的数组作为分组键,将所有集合语义相同的数组合并为一组,完成去重。
  • 后续$project和$group:将去重后的数组整理成你需要的数组列表格式,最终返回结果为:
    { "letters": [ ["a", "b"], ["a", "c"], ["b"], ["a"] ] }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:01:09