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

Mongoose如何使用aggregate实现与distinct相同的字符串数组返回效果

要实现和 model.find().distinct("some_field") 完全一致的返回效果,你可以使用如下聚合管道:

model.aggregate([
  // 匹配存在目标字段且值不为null的文档,对齐原生distinct的默认行为
  { $match: {
    "some_field": { $exists: true, $ne: null }
  }},
  // 按目标字段分组,完成值去重
  { $group: {
    _id: "$some_field"
  }},
  // 把所有去重后的值合并为单个数组
  { $group: {
    _id: null,
    result: { $push: "$_id" }
  }},
  // 输出纯净的数组结果,去掉多余的_id字段
  { $project: {
    _id: 0,
    result: 1
  }}
])

补充说明

  • 原生distinct默认会自动忽略字段不存在或字段值为null的文档,所以聚合管道第一步必须加$match过滤,否则返回结果会多出来一个null值,和原生结果不一致。
  • 执行聚合后返回的结果是一个长度为1的数组,取第一个元素的result属性,就能得到和distinct完全相同的字符串数组。
  • 如果你不需要严格对齐原生distinct的null过滤逻辑,也可以省略第一步的$match阶段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:06:02