【问题标题】:how to do search functionality如何做搜索功能
【发布时间】:2017-04-06 11:10:37
【问题描述】:

请帮帮我。 我正在制作搜索功能。以下是我的代码和用户故事。我只能通过第一个用户故事,但不能通过其他故事。谁能帮帮我。

用户故事:

  1. 作为用户,如果我使用技能和位置进行搜索,我应该得到与查询匹配的结果。

  2. 作为用户,如果我只使用技能进行搜索,我应该得到与查询匹配的结果。

  3. 作为用户,如果我只使用 Location 进行搜索,我应该得到与查询匹配的结果。

  4. 作为用户,如果我使用无效的技能(J、A、B)或位置进行搜索,我不应该得到与查询匹配的结果..

    var search = {
     get: function (req, res) {
        var locationQuery = req.params.locationQuery,
        skillsQuery = req.params.skillsQuery;
    
        Jobs.find({state: { "$regex": locationQuery, "$options": "i" }, Skills: { "$regex": skillsQuery, "$options": "i" }}, function(err, result) {
            if (err) {
                console.log('Not a Valid Search');
                res.status(500).send(err, 'Not a Valid Search');
            }else {
                res.json(result);
            }            
        });
     }
    };
    

【问题讨论】:

  • 即使是第 4 个故事也应该可以工作..
  • 用户故事 1 和 4 要求 stateskill 匹配,而用户故事 2 和 3 匹配 stateskill。如果我的理解是正确的,那么您在这里有两个选择。简单的选项是编写不同的 mongo 查询并根据搜索查询运行适当的查询。第二种选择是根据搜索查询构建动态 mongo 查询。第一个选项很简单,但它需要多个 mongo 查询,而第二个选项更难,但允许您在一个查询中管理所有内容。
  • 用户故事 4 必须失败,因为它是无效的输入权限。如果用户输入单个字符并开始搜索,那么它不应该给出结果,它一定会失败。正如你所说的用户故事 2 和 3 第二个选项,你能简要解释一下如何做吗?

标签: node.js mongodb express mean-stack


【解决方案1】:

对于这种可选的支持,在 GET 中最好将搜索参数作为查询。可以参考下面的代码sn-p。

var search = {
 get: function (req, res) {
    var query = {};
    if(req.query.locationQuery){
      query.state = { "$regex": req.query.locationQuery, "$options": "i" };
    }
    if(req.query.skillsQuery){
      query.Skills = { "$regex": req.query.skillsQuery, "$options": "i" }
    }

    Jobs.find(query, function(err, result) {
        if (err) {
            console.log('Not a Valid Search');
            res.status(500).send(err, 'Not a Valid Search');
        }else {
            res.json(result);
        }            
    });
 }
};

更新:

将您的路线定义为: searchRoute.get('/', search.get);

您可以将查询参数发送为(通过 POSTMAN):

localhost:3000/api/search/?skillsQuery="java,javascript"&lo‌​cationQuery="Mumbai

【讨论】:

  • 嘿 Tolsee,当我尝试对每个查询使用此查询时,它会显示所有作业列表。
  • 你能分享你的获取网址吗?
  • 如果您的 find 方法向您发送所有作业,而不是查询设置不正确。你可能想检查一下。仅供参考,您应该提供搜索参数作为查询,例如 /endpoint/search/?locationQuery=your-reg-ex
  • 在邮递员中我正在像这样搜索localhost:3000/api/search/java,javascript/Mumbai
  • 这里您必须在 GET 查询参数中发送搜索结果,例如 `localhost:3000/api/search/?skillsQuery="java,javascript"&locationQuery="Mumbai"
猜你喜欢
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
相关资源
最近更新 更多