MongoDB解决大小写问题,计算Tel Aviv的预订天数总和
解决MongoDB统计指定城市(忽略大小写)的字段总和问题
针对你的需求,有两种高效的修改方式:
方法一:先过滤再求和(推荐,性能更优)
先通过$match阶段筛选出所有城市名(忽略大小写)为Tel Aviv的文档,再直接求和,避免不必要的分组计算:
db.Customers.aggregate([ { $match: { $expr: { $eq: [{ $toLower: "$city" }, "tel_aviv"] } } }, { $group: { _id: null, total_days_booked: { $sum: "$Number_Days_booked" } } } ])
$expr允许在匹配条件中使用聚合表达式,这里通过$toLower统一转换city字段为小写,再和目标值"tel_aviv"比对- 分组时
_id: null表示将所有匹配文档合并为一组,直接计算总和
方法二:先分组再过滤
如果需要保留分组逻辑,也可以先按小写城市名分组,再筛选出目标城市的分组结果:
db.Customers.aggregate([ { $group: { _id: { $toLower: "$city" }, total_days_booked: { $sum: "$Number_Days_booked" } } }, { $match: { _id: "tel_aviv" } } ])
这种方式会先统计所有城市的总和,再筛选出Tel Aviv的结果,适合需要同时查看其他城市数据的场景,但性能不如方法一。
内容的提问来源于stack exchange,提问作者Itamar Nahum
相关产品推荐
相关产品推荐

