Ich habe eine MongoDB mit einer großen "Nachrichten" -Sammlung; alle Nachrichten, die zu einem bestimmten groupId
gehören. Also habe ich mit einer Veröffentlichung wie dieser begonnen:
und ein Abonnement wie folgt:
%Vor% Das brachte mich in Schwierigkeiten, weil currentGroupId
zu undefiniert ist, aber sill mongod würde die CPU verbrauchen, um Nachrichten mit groupId == null
zu finden (obwohl ich weiß, dass es keine gibt).
Nun habe ich versucht, die Publikation wie folgt neu zu schreiben:
%Vor%und / oder um das Abonnement neu zu schreiben:
%Vor% was anfangs hilft. Aber sobald currentGroupId
wieder undefiniert wird (weil der Benutzer zu einer anderen Seite navigiert), ist mongod immer noch damit beschäftigt, die Datenbank für die letzte subskribierte groupId
erneut anzufragen. Wie kann ich mich von einer Publikation abmelden, so dass der Mongod nicht mehr abgefragt wird?
Einfach eine Bedingung zur Veröffentlichung hinzufügen:
%Vor%und das Abonnement beibehalten:
%Vor%erledigt den Job.
Es ist nicht notwendig, die Veröffentlichung explizit zu stoppen. Schließlich wird die MongoDB nicht mehr abgefragt, nachdem die aktuell ausgeführte Abfrage beendet wurde und noch eine andere ausgegeben wurde (die irgendwo in das System eingereiht zu sein scheint).
Laut der Dokumentation muss Ссылка
seinthis.stop () Rufen Sie innerhalb der Veröffentlichungsfunktion auf. Stoppt das Abonnement dieses Kunden; Der Rückruf onError wird auf dem Client nicht aufgerufen.
So etwas wie
%Vor%Und ich denke, auf der Clientseite kannst du einfach dein if / else wie in deinem ersten Beispiel entfernen
%Vor% In deinem Fall solltest du autorun
Es gibt ein Beispiel in der Dokumentation
Ihr Autorun wird tatsächlich mit einem Parameter aufgerufen, mit dem Sie ihn stoppen können:
%Vor%Tags und Links meteor