gpt4 book ai didi

javascript - Meteor 发布/订阅独特客户端集合的策略

转载 作者:IT老高 更新时间:2023-10-28 13:04:42 26 4
gpt4 key购买 nike

使用 Meteor,我想知道如何最好地处理共享相同服务器端数据库集合的不同客户端集合。考虑以下示例:我有一个 User 集合,在我的客户端我有一个 friend 用户列表,我有一个执行查询的搜索功能在整个用户数据库上,返回一个 与查询匹配的用户名列表

在发布服务器端方法中,我有两个针对同一集合的查询,它们返回不同的文档集。这些数据是否应该在客户端进入两个单独的集合?还是应该将所有匹配两个查询的用户文档都放在同一个集合中?如果是后者,我会复制用于服务器端和客户端查询的代码吗?

在服务器上:

Meteor.publish('searchResults', function(query){
var re = new RegExp(query, 'i')
return Users.find({ 'name' : {$regex: re}})
})

在客户端:

Session.set('searchQuery', null)

Meteor.autosubscribe(function(){
Meteor.subscribe('searchResults', Session.get('searchQuery'))
})

Template.search.events = {
'keyup #user-search' : function(e){
Session.set('searchQuery', e.target.value)
}
}

_.extend(Template.search, {

searchResults: function() {
var re = new RegExp(Session.get('searchQuery'), 'i')
return Users.find({ 'name' : {$regex: re}})
}
})

这似乎是一个合理的解决方案,但不是最佳解决方案。如果我想创建一个新的客户端集合,其中包含来自多个服务器端集合的搜索结果,该怎么办?

最佳答案

在共享区域中:

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
}

在服务器上:

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

在客户端:

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

从中得出的关键结论是,当数据通过电线传输并不明显。 meteor 似乎结合在服务器上的各种查询中匹配的记录并将其发送下到客户。然后客户端再次运行相同的查询以进行拆分他们分开。

例如,假设您在服务器端集合中有 20 条记录。然后你有两次发布:第一次匹配 5 条记录,第二次匹配 6 条记录,其中 2 条是相同。 Meteor 将发送 9 条记录。然后在客户端上运行确切的您在服务器上执行的相同查询,您最终应该得到 5 和 6分别记录。

关于javascript - Meteor 发布/订阅独特客户端集合的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12223866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com