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

如何在Node.js+Express+Mongoose中接收正则表达式查询参数

通过参数实现Mongoose正则表达式查询

作为Node.js、Express、Mongoose新手,我想实现通过传入正则表达式参数来查询并返回匹配的文档(已知直接传未处理的输入有风险,仅做尝试)。

硬编码正则查询可行

直接在代码里写正则表达式可以正常查询:

const result = await Model.find( { name : /Dave/ } );

这段代码能正确返回数据库中name字段为Dave的文档。

传入参数时出现报错

尝试通过Postman向localhost:8080/query发送POST请求,请求体传入myQuery: { name: /Dave/ },路由代码如下:

var query = req.body.myQuery
const result = await Model.find(query);

此时收到报错:

"Parameter \"filter\" to find() must be an object, got { name : /Dave/ }"

问题原因

HTTP请求体中的/Dave/会被解析为字符串,而非JavaScript的RegExp对象,Mongoose无法将其识别为有效的查询条件,因此报错。

解决方案(仅供参考,不够严谨)

我通过拆分参数的方式解决了问题,具体参数说明:

  • mmField:指定要搜索的字段,例如Lastname
  • mmRegex:指定要匹配的目标字符串,例如Johnson
  • mmRegexOp:正则表达式选项,例如i(忽略大小写)或留空

路由实现代码:

router.post('/mmRegex', async (req, res) => {
    try {
        const map = new Map([[ req.body.mmField , new RegExp(req.body.mmRegex, req.body.mmRegexOp)]]);
        const query = Object.fromEntries(map);
        console.log("RegEx: ", query);
        const result = await Model.find(query).select('mmKey');
        res.send(result);
    }
    catch (error) {
        console.log("No Key");
        res.status(500).json({ status: "failed", message: error.message })
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:50:26