MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Meteor:publique 2 projeções diferentes de elementos do array


Examinei diferentes abordagens. O problema pode ser resolvido caso a caso, selecionando cuidadosamente os campos e atendendo ao pedido de assinatura, mas essas soluções são frágeis e dependem de condições arbitrárias não documentadas.

A única solução real e genérica é uma coleção virtual . O caso mais simples é simplesmente publicar um cursor sob um nome de coleção diferente do lado do cliente. Por exemplo:
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
  })
}

E então, em sua publicação, em vez de retornar um cursor :
var cursor = Users.find()
publishVirtual(this, 'virtualUsers', cursor)
this.ready()