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

Suscripción a la colección Meteor.Users

Si desea que esta configuración funcione, debe hacer lo siguiente:

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, en el lado del cliente, debe definir una colección solo del lado del cliente:

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

y suscríbase al conjunto de datos correspondiente:

Meteor.subscribe('thisNameDoesNotMatter');

Esto debería funcionar ahora. Avísame si crees que esta explicación no es lo suficientemente clara.

EDITAR

Aquí, el self.added/changed/removed los métodos actúan más o menos como un despachador de eventos. Brevemente hablando, dan instrucciones a cada cliente que llamó

Meteor.subscribe('thisNameDoesNotMatter');

sobre las actualizaciones que deben aplicarse en la colección del cliente llamada thisNameMatters asumiendo que esta colección existe. El nombre, pasado como el primer parámetro, se puede elegir casi arbitrariamente, pero si no hay una colección correspondiente en el lado del cliente, se ignorarán todas las actualizaciones. Tenga en cuenta que esta colección puede ser solo del lado del cliente, por lo que no necesariamente tiene que corresponder a una colección "real" en su base de datos.

Devolver un cursor desde su publish método es solo un atajo para el código anterior, con la única diferencia de que se usa el nombre de una colección real en lugar de nuestro theNameMatters . Este mecanismo en realidad le permite crear tantos "espejos" de sus conjuntos de datos como desee. En algunas situaciones esto puede ser muy útil. El único problema es que estas "colecciones" serán de solo lectura (lo cual tiene mucho sentido por cierto) porque si no están definidas en el servidor, los métodos correspondientes de 'insertar/actualizar/eliminar' no existen.