MongoDB Похожий на Yelp поисковик, местоположение + категория - PullRequest
0 голосов
/ 19 апреля 2019

Я создаю приложение, похожее на Yelp, используя MongoDB, Express, JS и Node.Поиском я смог найти, как искать несколько полей схемы кампуса (кампусы, рестораны, парикмахерские, название).Теперь я хочу уточнить поиск по местоположению (например, рестораны / бизнес в Лос-Анджелесе), и мне нужна помощь в этом.Вот что я пробовал до сих пор:

Я пробовал команды $ и / $ or для Mongo.Когда я просто использую $ или, я могу искать по имени или местоположению.

Маршрут

router.get("/campus", function(req, res){
var noMatch = null;
if(req.query.search){
    const regex = new RegExp(escapeRegex(req.query.search), 'gi');
    Campus.find({$and:[
        {$or: [{name: regex}, {location:regex},  {food: regex},  
               {cost: regex}, {category:regex}]} ,
        {$or: [{location: regex}]},
        ]},
        function(err, allCampuses){
    if(err){
        console.log(err);
    } else {
        if(allCampuses.length < 1){
            req.flash("error", "No campus match that search, please try 
                       again.");
            return res.redirect("back");
            // noMatch = "No campus match that query, please try again.";
        }
        res.render("campus/index", {campus:allCampuses, currentUser: 
                                    req.user, noMatch: noMatch});
    }
})
} else{
//get all campus from DB
Campus.find({}, function(err, allCampuses){
    if(err){
        console.log(err);
    } else {
        res.render("campuses/index", {campus:allCampuses, currentUser: 
                    req.user, noMatch: noMatch});
    }
})
}
})

HTML


    <div class="container">
   <header id="coverImage" class="jumbotron img-fluid">
       <div class="container">
            <h1>Welcome to CampusFinder</h1>
            <p>View our hand-picked Campuses</p>
            <p>
               <a class="btn btn-primary btn-lrg" href="/bizs/new">Add New Campus</a>
           </p>
            <p>
             <form action="/campuses" method="GET" class="form-inline">
                 <div class="form-group" > 
                    <input type="text" name="search" placeholder="campuses 
                                          search" class="form-control">
                    <input type="submit" value="Search" class="btn btn default">
                 </div>
                 <div class="form-group">
                     <label for="location">Location</label>
                     <input class="form-control" type="text" name="location" id="location" placeholder="Florida">
                 </div>
             </form>
            </p>
       </div>
    </header>

Я ожидаю, что вывод будет работать как Yelp.Когда я выбираю местоположение и ищу кампус, кампусы этого города заполняются.

1 Ответ

0 голосов
/ 21 апреля 2019

Я думаю, что вы должны исключить {location:regex} из первого условия и использовать другой параметр для захвата входного местоположения, чтобы дать второму предложению AND.

  {
    $and: [
      {
        $or: [
          { name: regex },
          { food: regex },
          { cost: regex },
          { category: regex }
        ]
      },
      { location: locationRegex }
    ]
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...