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

Strategie di pubblicazione/sottoscrizione di Meteor per raccolte esclusive lato client

In un'area condivisa:

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
}

Sul server:

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

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

Il punto chiave di questo è che ciò che accade dietro le quinte quando i dati vengono trasferiti via cavo non è ovvio. Meteor sembra combinare i record che sono stati abbinati nelle varie query sul server e inviarli al client. Spetta quindi al client eseguire nuovamente la stessa query per dividerli.

Ad esempio, supponiamo di avere 20 record in una raccolta lato server. Hai quindi due pubblicazioni:la prima corrisponde a 5 record, la seconda corrisponde a 6, di cui 2 uguali. Meteor invierà 9 record. Sul client, quindi esegui esattamente le stesse query che hai eseguito sul server e dovresti ottenere rispettivamente 5 e 6 record.