Examiné diferentes enfoques. El problema se puede resolver caso por caso seleccionando cuidadosamente los campos y teniendo en cuenta el orden de suscripción, pero estas soluciones son endebles y se basan en condiciones arbitrarias no documentadas.
La única solución real y genérica es una colección virtual . El caso más simple es simplemente publicar un cursor bajo un nombre de colección diferente del lado del cliente. Por ejemplo:
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
})
}
Y luego, en su publicación, en lugar de devolver un cursor
:
var cursor = Users.find()
publishVirtual(this, 'virtualUsers', cursor)
this.ready()