2013-10-03 6 views
16

Meteor Grenze verwenden, würde Ich mag eine Abfrage in Meteor laufen und die Anzahl des Feldes begrenzt zurück mein Code nur 5. Hier:Wie richtig

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; 

Allerdings, wenn ich das tue, ich alle bekommen die Kurse, die zum Selektor im Konsolenprotokoll passen und nicht nur 10 davon. In der Vorlage ist alles in Ordnung und es werden nur 10 Kurse angezeigt.

ich auf diese Frage sah: Limit number of results in Meteor on the server side?

aber als ich Spezifika _ID bin mit nicht nicht helfen Felder für meine Kurse, ich bestimmte _id Felder verwende aber für andere Sammlungen though.

Antwort

25

Derzeit sendet der Server die gesamte Sammlung von Kursen und Sie filtern sie nur auf der Clientseite auf 10. Sie können tatsächlich eine reaktive Zeichnungs-/Veröffentlichung erstellen die Grenze dynamisch einzustellen, oder Sie könnten nur die Menge der Datensätze auf dem Server

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')); 

Und dann eingestellt, indem ein Ereignis die Grenze dynamisch, die Anrufe gesendet begrenzen:

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

Große Antwort, aber die Vorlage, die Kurse verwendet, wird nicht wiedergegeben, wenn sich die Sitzung ändert. Irgendeine Idee warum das sein könnte? – Stefan

+5

Ich habe das Netz stundenlang nach einer Lösung gesucht, bevor ich den obigen Kommentar gepostet habe. Und eine Minute nach dem fand ich die Lösung: Deps.autorun (function() { Meteorsubscribe ("Kurse", Session.get ("Limit")); }); – Stefan