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

Inscrevendo-se na coleção Meteor.Users


Se você quiser que essa configuração funcione, você precisa fazer o seguinte:
Meteor.publish('thisNameDoesNotMatter', function () {
  var self = this;
  var handle = Meteor.users.find({}, {
    fields: {emails: 1, profile: 1}
  }).observeChanges({
    added: function (id, fields) {
      self.added('thisNameMatters', id, fields);
    },
    changed: function (id, fields) {
      self.changed('thisNameMatters', id, fields);
    },
    removed: function (id) {
      self.removed('thisNameMatters', id);
    }
  });

  self.ready();

  self.onStop(function () {
    handle.stop();
  });

});

Não, no lado do cliente, você precisa definir uma coleção somente do lado do cliente:
directories = new Meteor.Collection('thisNameMatters');

e assine o conjunto de dados correspondente:
Meteor.subscribe('thisNameDoesNotMatter');

Isso deve funcionar agora. Deixe-me saber se você acha que esta explicação não é clara o suficiente.

EDITAR

Aqui, o self.added/changed/removed métodos agem mais ou menos como um despachante de eventos. Resumidamente, eles dão instruções a cada cliente que ligou
Meteor.subscribe('thisNameDoesNotMatter');

sobre as atualizações que devem ser aplicadas na coleção do cliente chamada thisNameMatters assumindo que esta coleção existe. O nome - passado como o primeiro parâmetro - pode ser escolhido quase arbitrariamente, mas se não houver coleção correspondente no lado do cliente, todas as atualizações serão ignoradas. Observe que essa coleção pode ser apenas do lado do cliente, portanto, não precisa necessariamente corresponder a uma coleção "real" em seu banco de dados.

Retornando um cursor do seu publish é apenas um atalho para o código acima, com a única diferença de que o nome de uma coleção real é usado em vez de nosso theNameMatters . Esse mecanismo realmente permite que você crie quantos "espelhos" de seus conjuntos de dados desejar. Em algumas situações isso pode ser bastante útil. O único problema é que essas "coleções" serão somente leitura (o que faz todo o sentido BTW) porque se não estiverem definidas no servidor, os métodos 'inserir/atualizar/remover' correspondentes não existirão.