MongoDB计算年份差值,筛选符合条件的红葡萄酒查询求助
MongoDB查询解决方案:筛选符合条件的红葡萄酒并按评分排序
需求对应实现
要筛选红葡萄酒、陈酿时长≥20年,同时按评分排序,直接用聚合框架的$match+$sort就能搞定,核心是用$expr实现字段间的计算判断:
完整查询代码
db.wines.aggregate([ // 第一步:筛选红葡萄酒且陈酿≥20年 { $match: { wineType: "Red", $expr: { $gte: [{$subtract: ["$endYear", "$startYear"]}, 20] } } }, // 第二步:按rating排序(-1是降序,1是升序) { $sort: { rating: -1 } } ])
关键细节说明
$expr是核心:它允许在$match里用聚合表达式计算字段差值,$subtract算出endYear减startYear的结果,再用$gte判断是否≥20- 不需要额外
$project:默认会返回匹配文档的所有字段,要是只需要特定字段,加个$project阶段就行,比如:
把这段放在{ $project: { _id: 1, wineType: 1, Brand: 1, startYear: 1, endYear: 1, rating: 1 } }$match和$sort中间即可。 - 集合名替换:记得把
db.wines里的wines换成你实际的集合名称。
内容的提问来源于stack exchange,提问作者ChrisZ
相关产品推荐
相关产品推荐

