如何在MongoDB中实现按指定年份查询记录 等效SQL年份筛选操作
MongoDB按年份查询等效实现方案
以下实现对应你给出的SQL语句效果,根据date字段的存储类型分为两种场景:
场景1:date字段为MongoDB标准ISO日期类型(推荐存储方式)
优先选择范围查询方案,性能更高且支持命中索引:
- 原生Mongo Shell查询写法:
// 替换yourCollectionName为实际业务集合名 db.yourCollectionName.find({ date: { $gte: ISODate('2021-01-01T00:00:00.000Z'), $lt: ISODate('2022-01-01T00:00:00.000Z') } })
- 后端对接前端表单参数的代码示例(以Node.js驱动为例):
// 接收HTML表单提交的年份参数 const queryYear = Number(req.query.year); const yearStart = new Date(queryYear, 0, 1); const yearEnd = new Date(queryYear + 1, 0, 1); // 执行查询 const result = await db.yourCollectionName.find({ date: { $gte: yearStart, $lt: yearEnd } }).toArray();
如果是小数据集不需要走索引,也可以用聚合运算符直接提取年份匹配:
db.yourCollectionName.find({ $expr: { $eq: [{ $year: "$date" }, 2021] } })
范围查询方式可以充分利用date字段上的索引,查询性能远高于提取年份的聚合查询,适合生产环境使用
场景2:date字段存储为YYYY-MM-DD格式字符串
用前缀匹配即可实现需求:
db.yourCollectionName.find({ date: { $gte: "2021", $lt: "2022" } })
内容的提问来源于stack exchange,提问作者Avery Lim
相关产品推荐
相关产品推荐

