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

如何用MongoDB实现SQL LIKE等效查询?我的代码为何不生效?

问题分析与修复方案

核心错误

你当前代码的问题在于正则表达式写法错误:

  • /req.query.Product_Name/是把req.query.Product_Name当成了字面量字符串,而非读取变量的值。MongoDB会去匹配Product_Name字段严格等于req.query.Product_Name的文档,自然找不到Test Product (22in)。

修复代码

要实现输入Test Product匹配到包含该字符串的产品,需要动态创建正则表达式,正确读取用户的搜索关键词:

let collection = database.collection('Product')
// 提取用户的搜索关键词
const searchKeyword = req.query.Product_Name
// 动态生成正则,匹配包含关键词的内容,'i'可选,用于不区分大小写匹配
const doc = await collection.find({
  "Product_Name": new RegExp(searchKeyword, 'i')
}).toArray()

console.log(doc)

额外优化(可选)

如果用户的搜索关键词可能包含正则特殊字符(比如.、*、?、(等),需要先转义这些字符,避免正则语法异常:

// 正则特殊字符转义函数
function escapeRegExp(str) {
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
}

let collection = database.collection('Product')
const searchKeyword = req.query.Product_Name
const escapedKeyword = escapeRegExp(searchKeyword)
const doc = await collection.find({
  "Product_Name": new RegExp(escapedKeyword, 'i')
}).toArray()

console.log(doc)

原理说明

  • new RegExp(searchKeyword)会将用户传入的关键词转换为正则表达式,比如用户输入Test Product时,生成的正则是/Test Product/,会匹配所有Product_Name字段中包含该字符串的文档,自然能命中Test Product (22in)。
  • 加上'i'标志后,搜索会忽略大小写,比如test product也能匹配到目标产品。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:55:20