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

MongoDB聚合查询多字段匹配无结果问题求助

MongoDB聚合查询多字段匹配无结果问题求助

看起来你遇到了一个典型的字段路径错误问题,我来帮你分析下原因:

你在$match阶段写的匹配条件是Template: {$eq: "notification"},但从你$group阶段的代码Template: "$EmailMessage.TemplateName"可以明显看出来,模板名称字段实际是嵌套在EmailMessage对象下的TemplateName属性,而非集合文档的顶层Template字段。

MongoDB在执行$match时,会去查找文档顶层的Template字段,但你的数据里根本不存在这个字段,自然匹配不到任何符合条件的文档,最终返回0条结果。

修正后的聚合查询代码

db.email.aggregate([
  {
    $match: {
      SentToEmailService: { $eq: true },
      // 修正字段路径为嵌套的EmailMessage.TemplateName
      "EmailMessage.TemplateName": { $eq: "notification" },
    }
  },
  {
    $group: {
      _id: {
        year : { $year : "$SentOn" },
        month : { $month : "$SentOn" },
        day : { $dayOfMonth : "$SentOn" },
        Template: "$EmailMessage.TemplateName",
        SentToEmailService: "$SentToEmailService"
      },
      total: { "$sum": 1 }
    }
  },
  { $sort: { _id: -1 } }
], { allowDiskUse: true })

额外验证建议

你可以先执行一个简单的find查询,确认目标数据确实存在:

db.email.find(
  { SentToEmailService: true, "EmailMessage.TemplateName": "notification" },
  { SentOn: 1, EmailMessage: 1 }
).limit(5)

如果这个查询能返回结果,那修正后的聚合查询肯定也能正常工作啦。

备注:内容来源于stack exchange,提问作者mwestley61

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:39:08