我有一個大的「消息」集合的MongoDB;所有屬於特定groupId
的消息。所以,已經開始用這樣的出版物:如何顯式取消訂閱集合?
Meteor.publish("messages", function(groupId) {
return Messages.find({
groupId: groupId
});
});
和訂閱像這樣:
Deps.autorun(function() {
return Meteor.subscribe("messages", Session.get("currentGroupId"));
});
這讓我陷入麻煩,因爲最初currentGroupId
是不確定的,但門檻的mongod會使用最多的CPU來查找郵件與groupId == null
(雖然我知道有沒有)。現在
,我試圖重寫公佈如下:
Meteor.publish("messages", function(groupId) {
if (groupId) {
return Messages.find({
groupId: groupId
});
} else {
return {}; // is this the way to return an empty publication!?
}
});
和/或訂閱改寫爲:
Deps.autorun(function() {
if (Session.get("currentGroupId")) {
return Meteor.subscribe("messages", Session.get("currentGroupId"));
} else {
// can I put a Meteor.unsubscribe("messages") here!?
}
});
最初這兩種幫助。但只要currentGroupId
變得未定義(因爲用戶導航到不同的頁面),mongod仍然忙於爲最後訂閱的groupId
重新查詢數據庫。那麼我怎樣才能取消訂閱出版物,以免mongod被查詢?
不幸的是,我沒有找到任何文件來證明這一說法。一個提示將非常感激。 – Dejan