2015-12-11 5 views
2

КОНТЕКСТmeteor.js и MongoDB - запрос с несколькими полями

Я пытаюсь создать функцию поиска, позволяющую пользователям заполнить несколько полей, представить и увидеть список подходящих элементов из одной коллекции. Я делаю это, используя форму на лицевой части, которая обновляет переменные сеанса во внутреннем интерфейсе, которые затем передаются как запрос к коллекции mongodb.

как он должен работать

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

КАК ЭТО РАБОТАЕТ РЕАЛЬНО

Если ничего не заполнено, при нажатии поиска дает все элементы в коллекции. Отправка как местоположения, так и размера дает места, которые соответствуют обоим критериям. Однако заполнение только одним полем и оставление другого пустого ничего не дает результатов. Мне интересно, почему это может быть - почти так, как если бы запрос искал поле, которое буквально содержит «...», но почему бы мне не увидеть это поведение, оставив оба поля пустым? Помогите оценить!

КОД SNIPPET

//Search Form Helper 
Template.managevenues.helpers({ 
    venue: function() { 

    var venueNameVar = Session.get('venueNameVar'); 
    var venueLocationVar = Session.get('venueLocationVar'); 

    if(venueNameVar || venueLocationVar){ 
     console.log(venueNameVar); 
     console.log(venueLocationVar); 

     return Venues.find({ 
      venueName: venueNameVar, 
      'venueAddress.neighbourhood': venueLocationVar 
    }); 
    } else { 
     return Venues.find({}); 
    } 
}); 

ответ

1

Ответ заключается в запросе

Venues.find({ 
     venueName: venueNameVar, 
     'venueAddress.neighbourhood': venueLocationVar 
}); 

Если вы не один из ваших vars установить это будет выглядеть ...

{ 
    venueName: undefined, 
    'venueAddress.neighbourhood':'someVal' 
} 

Таким образом, это будет соответствовать любому месту, где нет имя и находится в некотором районе.

Лучше было бы только набор критериев запроса, если есть значение для поиска ...

var query = {}; 
if(Session.get('venueNameVar')) { 
    query.venueName = Session.get('venueNameVar'); 
} 
if(Session.get('venueLocationVar') { 
    query.venueAddress = { 
     neighbourhood : Session.get('venueLocationVar'); 
    } 
} 
return Venues.find(query); 

Я думаю, что это будет работать немного лучше для вас!

+0

Пятно на - спасибо столько Затенение. – Sekoul

+0

С удовольствием! – Shaded