Trong một khu vực được chia sẻ:
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
}
Trên máy chủ:
Meteor.publish("searchUsers", getSearchUsers);
Meteor.publish("friendUsers", getFriendUsers);
Trên máy khách:
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();
}
});
Điều quan trọng rút ra từ điều này là những gì xảy ra đằng sau hậu trường khi dữ liệu được truyền qua dây không rõ ràng. Meteor dường như để kết hợp các bản ghi được khớp trong các truy vấn khác nhau trên máy chủ và gửi dữ liệu này đến máy khách. Sau đó, khách hàng phải chạy lại cùng một truy vấn để tách biệt.
Ví dụ:giả sử bạn có 20 bản ghi trong bộ sưu tập phía máy chủ. Sau đó, bạn có hai lần xuất bản:bản đầu tiên phù hợp với 5 bản ghi, bản thứ hai phù hợp với 6 bản ghi, trong đó 2 bản giống nhau. Meteor sẽ gửi xuống 9 bản ghi. Trên máy khách, sau đó bạn chạy các truy vấn tên chính xác mà bạn đã thực hiện trên máy chủ và bạn sẽ có 5 và 6 từ tương ứng.