MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Meteor :publier 2 projections différentes d'éléments de tableau

J'ai examiné différentes approches. Le problème peut être résolu au cas par cas en sélectionnant soigneusement les champs et en respectant l'ordre d'abonnement, mais ces solutions sont fragiles et reposent sur des conditions arbitraires non documentées.

La seule véritable solution générique est une collection virtuelle . Le cas le plus simple consiste simplement à publier un curseur sous un autre nom de collection côté client. Par exemple :

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
  })
}

Et puis, dans votre publication, au lieu de renvoyer un cursor :

var cursor = Users.find()
publishVirtual(this, 'virtualUsers', cursor)
this.ready()