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

MongoDB find()正则表达式过滤无效,返回空数组求助

问题原因及解决方案

你的问题出在正则表达式的转义字符处理上:

  • JavaScript字符串中,\是转义符,直接写"\d\d\d\d-"时,\d会被解析成无效转义(实际变成普通字符d),最终生成的正则是dddd-<month>-dd,自然匹配不到YYYY-MM-DD格式的日期。

修复步骤

  1. 修正正则的转义字符:把字符串里的\d改成\\d,让RegExp能正确识别数字匹配元字符:
const regexp = new RegExp("\\d\\d\\d\\d-" + month + "-\\d\\d");

或者用ES6模板字符串,同样需要双重转义,同时用更简洁的量词写法:

const regexp = new RegExp(`\\d{4}-${month}-\\d{2}`);
  1. 可选优化:用日期范围查询替代正则
    正则匹配日期效率较低,MongoDB推荐用日期范围查询。假设你的date字段是字符串格式(如"2024-05-15"),可以构造当月的起始和结束日期:
// 假设month是两位数字,比如"05"
const year = new Date().getFullYear().toString(); // 或根据业务需求指定年份
const startDate = `${year}-${month}-01`;
const endDate = `${year}-${month}-31`;

const allExpenses = await Expense.find({
  date: { $gte: startDate, $lte: endDate }
});
const allEarnings = await Earning.find({
  date: { $gte: startDate, $lte: endDate }
});

如果date是Date类型,就构造Date对象进行范围查询,效率会更高。

验证方法

修改后可以打印regexp.source查看实际正则表达式,确认是否是预期的\d{4}-<month>-\d{2}。

内容的提问来源于stack exchange,提问作者legendman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:35:21