Tôi có MongoDB với bộ sưu tập "tin nhắn" lớn; tất cả các tin nhắn thuộc về một số cụ thể groupId
. Vì vậy, tôi đã bắt đầu với một ấn phẩm như thế này:Làm cách nào để hủy đăng ký nhận một bộ sưu tập?
Meteor.publish("messages", function(groupId) {
return Messages.find({
groupId: groupId
});
});
và một thuê bao như thế này:
Deps.autorun(function() {
return Meteor.subscribe("messages", Session.get("currentGroupId"));
});
này đã cho tôi gặp rắc rối vì ban đầu currentGroupId
là undefined nhưng mongod sill sẽ sử dụng CPU lên để tìm thông điệp với groupId == null
(mặc dù tôi biết không có).
Bây giờ, tôi đã cố gắng để viết lại các ấn phẩm như sau:
Meteor.publish("messages", function(groupId) {
if (groupId) {
return Messages.find({
groupId: groupId
});
} else {
return {}; // is this the way to return an empty publication!?
}
});
và/hoặc viết lại các thuê bao:
Deps.autorun(function() {
if (Session.get("currentGroupId")) {
return Meteor.subscribe("messages", Session.get("currentGroupId"));
} else {
// can I put a Meteor.unsubscribe("messages") here!?
}
});
mà vừa mang lợi ích ban đầu. Nhưng ngay sau khi currentGroupId
trở thành không xác định một lần nữa (vì người dùng điều hướng đến một trang khác), mongod vẫn đang bận xử lý lại cơ sở dữ liệu cho lần đăng ký cuối cùng groupId
. Vì vậy, làm thế nào tôi có thể hủy đăng ký từ một ấn phẩm như vậy mà mongod là ngừng được truy vấn?
Thật không may, tôi không tìm thấy bất kỳ tài liệu nào để chứng minh khiếu nại này. Một gợi ý sẽ rất được đánh giá cao. – Dejan