2015-01-14 16 views
10

Ist es möglich, nur die Anzahl für eine Sammlung für den Benutzer zu veröffentlichen? Ich möchte die Gesamtzahl auf der Homepage anzeigen, aber nicht alle Daten an den Benutzer übergeben. Dies ist, was ich versuchte, aber es funktioniert nicht:Meteor - Veröffentlichen Sie nur die Anzahl für eine Sammlung

Wenn ich das versuche, bekomme ich eine endlose Ladeanimation.

+0

ist gehören jene 'Tasks' Benutzern oder irgendetwas? Warum ich frage ist, dass Sie diese Zählung innerhalb der 'Benutzer'-Sammlung selbst beibehalten und von dort abrufen können – ajduke

Antwort

16

Meteor.publish Funktionen sollten Cursor zurückgeben, aber hier geben Sie direkt eine Number zurück, die die Gesamtzahl der Dokumente in Ihrer Tasks Sammlung ist.

Das Zählen von Dokumenten in Meteor ist eine überraschend schwierigere Aufgabe als es scheint, wenn Sie es auf die richtige Art und Weise tun möchten: Verwenden einer Lösung, die sowohl elegant als auch effektiv ist.

Das Paket ros:publish-counts (eine Gabel von tmeasday:publish-counts) liefert genaue Zählungen für kleine Sammlungen (100-1000) oder „fast genau“ zählt für größere Sammlungen (Zehntausende), um die fastCount Option.

Sie können es auf diese Weise verwenden:

// server-side publish (small collection) 
Meteor.publish("tasks-count",function(){ 
    Counts.publish(this,"tasks-count",Tasks.find()); 
}); 

// server-side publish (large collection) 
Meteor.publish("tasks-count",function(){ 
    Counts.publish(this,"tasks-count",Tasks.find(), {fastCount: true}); 
}); 

// client-side use 
Template.myTemplate.helpers({ 
    tasksCount:function(){ 
    return Counts.get("tasks-count"); 
    } 
}); 

Sie werden sowie eine serverseitige maßen performant Implementierung eines clientseitigen reaktiven Zahl erhalten.

Dieses Problem wird in einer (gegen Entgelt) bullet proof Meteor Lektion, die ein Lesen empfohlen wird diskutiert: https://bulletproofmeteor.com/

6

würde ich einen Meteor.call

-Client verwenden:

var count; /// Global Client Variable 

Meteor.startup(function() { 
    Meteor.call("count", function (error, result) { 
     count = result; 
    }) 
}); 

Rückkehr count in einigen Helfern

Server:

Meteor.methods({ 
    count: function() { 
    return Tasks.find().count(); 
    } 
}) 

* Diese Lösung Hinweis nicht reaktiv sein würde. Falls jedoch eine Reaktivität gewünscht wird, kann diese eingebaut werden.

Verwandte Themen