如何使用 Express 和 Mongo 进行文本搜索?

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

我是一名从事学校项目的实习生。我正在使用 Node、Express 和 Mongo 开发 REST API。 到目前为止,我成功完成了整个 CRUD,但我想通过添加文本搜索来改进我的工作。我希望它搜索数据库并仅返回与我的查询参数相对应的结果(而不是获取所有集合的数据并在之后进行搜索)。 例如,我有一个用户集合,我希望用户能够通过用户名搜索朋友。

我尝试将索引添加到我的模型中,或将“text: true”项添加到我想要在模型中用作搜索条件的特定字段,如下所示:

const userSchema = new Schema({
  username: {
    type: String,
    required: true,
    min: 3,
    max: 15,
    text: true
  },
...

然后,我从路由器中的 URL 获取查询文本,并将其传递给我的控制器函数(它有效,我通过 console.logged 它)。

.get(async (req, res) => {
    try {
      if (req.query.pseudo) {
        const searched = req.query.pseudo
        const usersSearched = getUsersByTextSearch(searched)
        return res.send(usersSearched)
      }
      const users = await getUsers()
      return res.send(users)
    } catch (e) {
      console.error(e)
      return res.status(500).send(e.message)
    }
  })

然后我在控制器中尝试了几件事,但我总是得到一个空对象作为响应:

const getUsersByTextSearch = async (search) => {
  const users = await User.find({
    $text:
    {
      $search: search,
      $language: 'fr',
      $caseSensitive: false
    }
  })
  return users
}

const getUsersByTextSearch = async (search) => {
  const users = await User.find({ pseudo: { $text: search, $options: 'i' } })
  return users
}

const getUsersByTextSearch = async (search) => {
  const users = await User.find({ pseudo: { $text: `${search}`, $options: 'i' } })
  return users
}

你能告诉我我的代码有什么问题/如果我使用了错误的工具吗?

javascript node.js mongodb express
1个回答
1
投票
let users = await User.find({
         pseudo: { $regex: `${search}`, $options: "i" } ,
    });

查询通过考虑具有不区分大小写选项的

pseudo
变量来搜索
search
与正则表达式模式匹配的文档。

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