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

Estrategias de publicación/suscripción de Meteor para colecciones únicas del lado del cliente

En un área compartida:

function getSearchUsers(query) {
  var re = new RegExp(query, "i");
  return Users.find({name: {$regex: re}});
}

function getFriendUsers() {
  return Users.find({friend: true});    // or however you want this to work
}

En el servidor:

Meteor.publish("searchUsers", getSearchUsers);
Meteor.publish("friendUsers", getFriendUsers);

En el cliente:

Template.search.onCreated(function () {
   var self = this;
   self.autorun(function () {
     self.subscribe("searchUsers", Session.get("searchQuery"));
   });
});

Template.friends.onCreated(function () {
  this.subscribe("friendUsers");
});

Template.search.helpers({
  searchResults: function () {
    return getSearchUsers(Session.get("searchQuery"));
  }
});

Template.friends.helpers({
  results: function () {
    return getFriendUsers();
  }
});

La conclusión clave de esto es que lo que sucede detrás de escena cuando los datos se transfieren por cable no es obvio. Meteorito parece combinar los registros que coincidieron en las diversas consultas en el servidor y enviar esto al cliente. Luego depende del cliente ejecutar la misma consulta nuevamente para separarlos.

Por ejemplo, suponga que tiene 20 registros en una colección del lado del servidor. Luego tiene dos publicaciones:la primera coincide con 5 registros, la segunda coincide con 6, de los cuales 2 son iguales. Meteor enviará 9 registros. En el cliente, luego ejecuta exactamente las mismas consultas que realizó en el servidor y debería terminar con 5 y 6 registros respectivamente.