我有一个带有大量“消息”集合的 MongoDB;属于特定的所有消息groupId
。所以从这样的出版物开始:
Meteor.publish("messages", function(groupId) {
return Messages.find({
groupId: groupId
});
});
和这样的订阅:
Deps.autorun(function() {
return Meteor.subscribe("messages", Session.get("currentGroupId"));
});
这给我带来了麻烦,因为最初currentGroupId
是未定义的,但是 sill 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 仍然忙于重新查询数据库以获取最后一个 subscribed groupId
。那么我怎样才能取消订阅一个出版物,以便停止查询 mongod 呢?