sql >> Base de Datos >  >> NoSQL >> MongoDB

Meteor:publica 2 proyecciones diferentes de elementos de matriz

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