2016-09-19 3 views
0

Мне нужно написать запрос, который работает как автозаполнение для поиска местоположения. Заявление else отлично подходит для поиска нужной страны, но когда пользователь пишет «Германия, Берлин», например, алгоритм подбрасывает другие страны, которые могут иметь город под названием «Берлин». Мне нужно его искать только города, которые расположены, например, «Германия».Поиск регулярного выражения Mongoose с двумя условиями

Просто, чтобы прояснить, переменная флага переходит в истину, когда в строке параметров поиска есть запятая. Затем он разбивается в стране и городе.

if(flag){ 
    World.findOne().or([{name:{$regex:country}},{cities: {$regex:city}}]).exec(function (err, users) { 
       if (err) return console.error(err); 
       console.log(users); 
       res.send(users); 
      }); 
}else{ 
    World.findOne({name:{$regex:val}}, {cities: {$slice: 10}}).exec(function (err, users) { 
       if (err) return console.error(err); 
       console.log(users); 
       res.send(users); 
      }); 
} 

Я попробовал это, как хорошо, но это вызывает ошибку компиляции:

if(flag){ 
    World.findOne({{country:{$regex:country}},{cities: {$regex:city}}}).exec(function (err, users) { 
       if (err) return console.error(err); 
       console.log(users); 
       res.send(users); 
      }); 

Пробовал то же самое с удалением внешних скобок в findOne()

+0

Что ошибка вы получаете? – abdulbarik

+0

На втором втором коде я получаю World.findOne ({{country: {$ regex: country}}, {cities: {$ regex: city}}}). Ex ^ SyntaxError: Неожиданный токен { –

ответ

0

Я думаю, вы не давая надлежащего query стоимость.

Попробуйте

if (flag) { 
    World.find({ 
    country: { 
     $regex: country 
    }, 
    cities: { 
     $regex: city 
    } 
    }).exec(function(err, users) { 
    if (err) return console.error(err); 
    console.log(users); 
    res.send(users); 
    }); 
} 
+0

Спасибо, теперь работал как шарм! –

+0

Отличный !! Рад помочь вам – abdulbarik

Смежные вопросы