Ho un MongoDB con una grande raccolta di "messaggi"; tutti i messaggi appartenenti a uno specifico groupId
. Quindi hanno iniziato con una pubblicazione come questa:Come cancellarsi esplicitamente da una collezione?
Meteor.publish("messages", function(groupId) {
return Messages.find({
groupId: groupId
});
});
e un abbonamento come questo:
Deps.autorun(function() {
return Meteor.subscribe("messages", Session.get("currentGroupId"));
});
Questo mi ha messo nei guai perché inizialmente currentGroupId
è indefinito ma mongod davanzale userebbe la CPU per trovare i messaggi con groupId == null
(anche se so che non ce ne sono).
Ora, ho provato a riscrivere la pubblicazione come segue:
Meteor.publish("messages", function(groupId) {
if (groupId) {
return Messages.find({
groupId: groupId
});
} else {
return {}; // is this the way to return an empty publication!?
}
});
e/o di riscrivere la sottoscrizione:
Deps.autorun(function() {
if (Session.get("currentGroupId")) {
return Meteor.subscribe("messages", Session.get("currentGroupId"));
} else {
// can I put a Meteor.unsubscribe("messages") here!?
}
});
cui entrambi aiuta inizialmente. Ma non appena lo currentGroupId
diventa di nuovo indefinito (poiché l'utente naviga verso una pagina diversa), mongod è ancora occupato nella ricerca del database per l'ultimo numero registrato groupId
. Quindi, come posso annullare l'iscrizione a una pubblicazione in modo tale da impedire l'interrogazione su mongod?
Purtroppo, non ho trovato alcuna documentazione per dimostrare questa affermazione. Un suggerimento sarebbe molto apprezzato. – Dejan