MongoDB/Mongoose 文本搜索不返回结果,尽管数据库中有匹配的文档

问题描述 投票:0回答:1

我正在开发一个 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 个结果。 我尝试了几个调试步骤,包括:

记录数据库中的产品总数 尝试更简单的查询 检查示例文档的结构

尽管做出了这些努力,我仍无法确定搜索未按预期进行的原因。任何有关如何解决此问题的见解或建议将不胜感激。

javascript mongodb mongoose search
1个回答
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
属性,导致它不会产生任何结果。

© www.soinside.com 2019 - 2024. All rights reserved.