MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Iscrizione alla collezione Meteor.Users

Se vuoi che questa configurazione funzioni, devi fare quanto segue:

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

});

No sul lato client è necessario definire una raccolta solo lato client:

directories = new Meteor.Collection('thisNameMatters');

e iscriviti al set di dati corrispondente:

Meteor.subscribe('thisNameDoesNotMatter');

Questo dovrebbe funzionare ora. Fammi sapere se ritieni che questa spiegazione non sia abbastanza chiara.

MODIFICA

Qui, il self.added/changed/removed i metodi agiscono più o meno come un dispatcher di eventi. In poche parole danno istruzioni a ogni cliente che ha chiamato

Meteor.subscribe('thisNameDoesNotMatter');

sugli aggiornamenti da applicare alla raccolta del client denominata thisNameMatters supponendo che questa raccolta esista. Il nome - passato come primo parametro - può essere scelto quasi arbitrariamente, ma se non esiste una raccolta corrispondente lato client tutti gli aggiornamenti verranno ignorati. Tieni presente che questa raccolta può essere solo lato client, quindi non deve necessariamente corrispondere a una raccolta "reale" nel tuo database.

Ritorno di un cursore dalla tua publish metodo è solo una scorciatoia per il codice sopra, con l'unica differenza che viene utilizzato il nome di una collezione vera e propria al posto del nostro theNameMatters . Questo meccanismo in realtà ti consente di creare tutti i "mirror" dei tuoi set di dati che desideri. In alcune situazioni questo potrebbe essere molto utile. L'unico problema è che queste "raccolte" saranno di sola lettura (il che ha assolutamente senso BTW) perché se non sono definite sul server i corrispondenti metodi "inserisci/aggiorna/rimuovi" non esistono.