Ik heb verschillende benaderingen onderzocht. Het probleem kan van geval tot geval worden opgelost door zorgvuldig velden te kiezen en de abonnementsvolgorde te volgen, maar deze oplossingen zijn dun en berusten op niet-gedocumenteerde willekeurige voorwaarden.
De enige echte, generieke oplossing is een virtuele verzameling . Het eenvoudigste geval is simpelweg een cursor publiceren onder een andere verzamelingsnaam aan de clientzijde. Bijvoorbeeld:
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
})
}
En dan, in uw publicatie, in plaats van een cursor
. terug te sturen :
var cursor = Users.find()
publishVirtual(this, 'virtualUsers', cursor)
this.ready()