【问题标题】:Multiple fields search with node and mongodb使用 node 和 mongodb 进行多字段搜索
【发布时间】:2021-07-19 05:32:34
【问题描述】:

这是一个 React、Node、MongoDB 和 Express 项目。 我正在尝试在我的“查找工作”页面上进行多个字段搜索。 路线如下所示:

<Route path="/findjobs/:keyword?/:location?/:category?/:page?">
    <FindJobs />
</Route>

在我的 redux 代码中,我得到不同的参数并将它们发送到后端。

  const { data } = await axios.get(`/api/jobs?keyword=${keyword}&location=${location}&category=${category}`);

使用唯一的“关键字”字段一切正常,我设法显示结果。

const getJobs = asyncHandler(async(req, res) => {
    const keyword = req.query.keyword ? {
        title: {
            $regex: req.query.keyword,
            $options: 'i'
        }
    } : {}

    const jobs = await Job.find({ ...keyword });
    res.json(jobs);
})

我想知道如何做同样的事情,但同时使用所有字段或仅使用第二个或第三个字段。我还注意到,使用 React,当我传递第二个字段而第一个字段为空时,它会创建一个类似“localhost:3000/findjobs//newyork”的链接。我对可选参数做错了吗?

【问题讨论】:

    标签: node.js reactjs mongodb express


    【解决方案1】:

    如果有人遇到同样的问题

    我做错了,首先你需要在路由中使用查询参数而不是 url 参数。

    那么你的控制器功能应该是这样的:

    const getJobs = asyncHandler(async (req, res) => {
      let queryCond = {};
    
      if (req.query.keyword) {
        queryCond.title = { $regex: req.query.keyword, $options: "i" };
      }
      if (req.query.location) {
        queryCond.location = req.query.location;
      }
      if(req.query.category) {
          queryCond.categories = { $all : [req.query.category] }
      }
    
      const jobs = await Job.find(queryCond);
    
      res.json(jobs);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多