Tôi đã xem xét các cách tiếp cận khác nhau. Vấn đề có thể được giải quyết trong từng trường hợp cụ thể bằng cách cẩn thận chọn các trường và cân nhắc thứ tự đăng ký, nhưng các giải pháp này là mỏng manh và dựa trên các điều kiện tùy ý không được lập thành văn bản.
Giải pháp chung, thực sự duy nhất là một tập hợp ảo . Trường hợp đơn giản nhất chỉ đơn giản là xuất bản con trỏ dưới tên bộ sưu tập phía máy khách, khác. Ví dụ:
function publishVirtual(sub, name, cursor) {
var observer = cursor.observeChanges({
added : function(id, fields) { sub.added(name, id, fields) },
changed: function(id, fields) { sub.changed(name, id, fields) },
removed: function(id) { sub.remove(name, id) }
})
sub.onStop(function() {
observer.stop() // important. Otherwise, it keeps running forever
})
}
Và sau đó, trong ấn phẩm của bạn, thay vì trả về cursor
:
var cursor = Users.find()
publishVirtual(this, 'virtualUsers', cursor)
this.ready()