Ich habe eine MongoDB mit einer großen "Nachrichten" Sammlung; alle Nachrichten, die zu einem bestimmten groupId
gehören. Also mit einer Publikation wie diese begonnen haben:Wie kann ich mich explizit von einer Sammlung abmelden?
Meteor.publish("messages", function(groupId) {
return Messages.find({
groupId: groupId
});
});
und ein Abonnement wie folgt aus:
Deps.autorun(function() {
return Meteor.subscribe("messages", Session.get("currentGroupId"));
});
Das hat mich in Schwierigkeiten, weil zunächst currentGroupId
undefiniert ist aber Schweller mongod die CPU aufbrauchen würde Nachrichten finden mit groupId == null
(obwohl ich weiß, dass es keine gibt).
Jetzt habe ich versucht, die Veröffentlichung wie folgt zu umschreiben:
Meteor.publish("messages", function(groupId) {
if (groupId) {
return Messages.find({
groupId: groupId
});
} else {
return {}; // is this the way to return an empty publication!?
}
});
und/oder das Abonnement zu umschreiben:
Deps.autorun(function() {
if (Session.get("currentGroupId")) {
return Meteor.subscribe("messages", Session.get("currentGroupId"));
} else {
// can I put a Meteor.unsubscribe("messages") here!?
}
});
, die beide zunächst hilft. Sobald jedoch currentGroupId
wieder undefiniert wird (weil der Benutzer zu einer anderen Seite navigiert), ist mongod immer noch damit beschäftigt, die Datenbank für die zuletzt abonnierte Adresse erneut anzufordern groupId
. Wie kann ich mich von einer Veröffentlichung abmelden, so dass der Mongod nicht mehr abgefragt wird?
Leider habe ich keine Unterlagen gefunden, um diese Behauptung zu beweisen. Ein Hinweis würde sehr geschätzt werden. – Dejan