2013-10-03 18 views
16

Chciałbym uruchomić kwerendę w meteor i ograniczyć liczbę dziedzinie zwrócone tylko 5. Oto mój kod:Jak korzystać z limitu meteor prawidłowo

var courses = Courses.find(
    { day_of_week : {$in: day_selector}, 
     price : {$gt : price_min, $lt : price_max}, 
     starts : {$gt : schedule_min}, 
     ends : {$lt : schedule_max}}, 
      {limit : 10}); 
console.log(courses); 
return courses; 

Jednak kiedy to robię, mam wszystko kursy, które pasują do selektora w logu konsoli, a nie tylko 10 z nich. W szablonie wszystko jest w porządku i wyświetla się tylko 10 kursów.

Patrzyłem na to pytanie: Limit number of results in Meteor on the server side?

ale to nie pomogło, bo nie używam specyfika _id pola dla moich kursach używam konkretnych pól _id ale dla innych kolekcji chociaż.

Odpowiedz

25

Obecnie serwer wysyła całą kolekcję kursów, a użytkownik filtruje je po 10 po stronie klienta. rzeczywiście można stworzyć reaktywne subskrypcji/publikacja aby ustawić limit dynamicznie, lub może po prostu ograniczyć ilość rekordów wysłanej na serwerze

Meteor.publish('courses', function(limit) { 
    //default limit if none set 
    var dl = limit || 10; 
    return Posts.find({}, {limit: dl}); 
}); 

Meteor.subscribe('courses', Session.get('limit')); 

a następnie ustawić limit dynamicznie przy użyciu zdarzenie, które wywołuje:

Session.set('limit', 5); 
+0

Świetna odpowiedź, ale szablon, który korzysta z kursów, nie jest renderowany po zmianie sesji. Jakiś pomysł, dlaczego tak się dzieje? – Stefan

+5

Przez kilka godzin szukałem rozwiązania w sieci, zanim opublikuję powyższy komentarz. I minutę po tym, znalazłem rozwiązanie: Deps.autorun (function() { Meteor.subscribe ("courses", Session.get ("limit")); }); – Stefan

Powiązane problemy