MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Abonnieren der Meteor.Users Collection

Wenn Sie möchten, dass dieses Setup funktioniert, müssen Sie Folgendes tun:

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

});

Nein, auf der Clientseite müssen Sie eine Nur-Client-seitige Sammlung definieren:

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

und den entsprechenden Datensatz abonnieren:

Meteor.subscribe('thisNameDoesNotMatter');

Das sollte jetzt funktionieren. Lassen Sie es mich wissen, wenn Sie der Meinung sind, dass diese Erklärung nicht klar genug ist.

BEARBEITEN

Hier der self.added/changed/removed Methoden fungieren mehr oder weniger als Event-Dispatcher. Kurz gesagt, sie geben jedem Kunden, der anruft, Anweisungen

Meteor.subscribe('thisNameDoesNotMatter');

über die Aktualisierungen, die auf die Sammlung des Clients mit dem Namen thisNameMatters angewendet werden sollten vorausgesetzt, dass diese Sammlung existiert. Der Name, der als erster Parameter übergeben wird, kann fast beliebig gewählt werden, aber wenn es auf der Client-Seite keine entsprechende Sammlung gibt, werden alle Aktualisierungen ignoriert. Beachten Sie, dass diese Sammlung nur clientseitig sein kann, also nicht unbedingt einer "echten" Sammlung in Ihrer Datenbank entsprechen muss.

Zurückgeben eines Cursors von Ihrem publish -Methode ist es nur eine Abkürzung für den obigen Code, mit dem einzigen Unterschied, dass der Name einer tatsächlichen Sammlung anstelle unseres theNameMatters verwendet wird . Dieser Mechanismus ermöglicht es Ihnen, so viele "Spiegelungen" Ihrer Datensätze zu erstellen, wie Sie möchten. In einigen Situationen kann dies sehr nützlich sein. Das einzige Problem ist, dass diese "Sammlungen" schreibgeschützt sind (was übrigens absolut sinnvoll ist), denn wenn sie nicht auf dem Server definiert sind, existieren die entsprechenden `insert/update/remove'-Methoden nicht.