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

MongoDB聚合查询:获取指定分支下邮箱非空的唯一客户信息

解决MongoDB聚合中无法获取customerEmail的问题

首先,咱们先看看你之前的聚合语句哪里出了问题:你的第一个$group阶段只按customerID分组,但没有保留customerEmail字段;后面的$addFields自然找不到这个字段,因为它已经在分组过程中丢失了,而且你多做了一次不必要的$group操作。

针对你的需求——获取指定分支下customerEmail非空的唯一customerID及对应邮箱,我们可以调整聚合管道如下:

db.collection.aggregate([
  // 第一步:过滤出分支为CO且邮箱非空的文档
  {
    $match: {
      branch: "CO",
      customerEmail: { $ne: "" } // 排除邮箱为空的无效记录
    }
  },
  // 第二步:按customerID分组,同时保留对应的邮箱(同一ID的邮箱一致,用$first/$last均可)
  {
    $group: {
      _id: "$customerID",
      customerEmail: { $first: "$customerEmail" }
    }
  },
  // 第三步:重命名字段,整理成预期的输出格式
  {
    $project: {
      _id: 0, // 去掉默认的_id字段
      customerID: "$_id",
      customerEmail: 1
    }
  }
])

各阶段作用说明:

  • $match:先筛选出符合条件的文档,减少后续处理的数据量,同时提前排除邮箱为空的无效记录。
  • $group:按customerID分组去重,用$first获取该用户对应的邮箱(因为同一用户的邮箱在所有文档中都是相同的,用$last也能得到一致结果)。
  • $project:重新整理输出字段,把分组用的_id改成customerID,并移除默认的_id字段,让输出完全匹配你想要的格式。

运行这个聚合语句后,就能得到你预期的结果:

{"customerID" : "11396783", "customerEmail" : "foo@bar.com"}
{"customerID" : "20103585", "customerEmail" : "xxx@yyy.com"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:49:19