Разгледах различни подходи. Проблемът може да бъде разрешен за всеки отделен случай чрез внимателно избиране на полета и следене на реда на абонамента, но тези решения са крехки и разчитат на недокументирани произволни условия.
Единственото реално, общо решение е виртуална колекция . Най-простият случай е просто да публикувате курсор под различно име на колекция от страна на клиента. Например:
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
})
}
И след това, във вашата публикация, вместо връщане на cursor
:
var cursor = Users.find()
publishVirtual(this, 'virtualUsers', cursor)
this.ready()