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
相关产品推荐
相关产品推荐

