我正在开发一个 Node.js 应用程序,使用 Express 和 Mongoose 与 MongoDB 数据库交互。我正在尝试实现产品的搜索功能,但遇到一个问题,即我的搜索查询没有返回任何结果,即使我知道数据库中有匹配的文档。 这是我当前的设置:
我有一个产品模型,其中包含“标题”和“描述”字段。 我正在使用 GET 路由根据“关键字”查询参数搜索产品。 我的搜索逻辑使用正则表达式来匹配标题或描述字段中的关键字。
这是我的代码的相关部分:
`if (req.query.keyword) {
const query = {};
query.$or = [
{ title: { $regex: req.query.keyword, $options: "i" } },
{ description: { $regex: req.query.keyword, $options: "i" } },
];
mongooseQuery = mongooseQuery.find(query);
}
const products = await mongooseQuery;`
当我向 /api/v1/products?keyword=SanDisk 发出请求时,我得到以下控制台输出:
Query: {"keyword":"SanDisk"}
Mongoose Query: {
"keyword": "SanDisk",
"$or": [
{
"title": {
"$regex": "SanDisk",
"$options": "i"
}
},
{
"description": {
"$regex": "SanDisk",
"$options": "i"
}
}
]
}
Results: 0
我已确认数据库中存在标题或描述中包含“SanDisk”的产品。但是,搜索始终返回 0 个结果。 我尝试了几个调试步骤,包括:
记录数据库中的产品总数 尝试更简单的查询 检查示例文档的结构
尽管做出了这些努力,我仍无法确定搜索未按预期进行的原因。任何有关如何解决此问题的见解或建议将不胜感激。
您的控制台输出与您的代码不匹配。
看起来您正在将
$or
添加到 req.query
并将其传递给 mongooseQuery.find()
:
if (req.query.keyword) {
req.query.$or = [
{ title: { $regex: req.query.keyword, $options: "i" } },
{ description: { $regex: req.query.keyword, $options: "i" } },
];
mongooseQuery = mongooseQuery.find(req.query);
}
这会在查询中留下
keyword
属性,导致它不会产生任何结果。