如何在Meteor中进行基于参数的发布并删除旧的订阅文档?

如何在Meteor中进行基于参数的发布并删除旧的订阅文档?,meteor,Meteor,我想在Meteor中实现一个基于参数的发布,但我遇到了一些问题 这是我的 当用户键入订阅发布并传递输入值的keyup事件时 'keyup#customerSearch':函数(事件、模板){ var关键字=template.find('#customerSearch').value; 如果(关键字){ 如果(关键字长度>=3){ Meteor.subscribe('sessioncustomers',关键字); } } } 发布使用此关键字返回记录 Meteor.publish(“sessio

我想在Meteor中实现一个基于参数的发布,但我遇到了一些问题

这是我的

当用户键入订阅发布并传递输入值的keyup事件时

'keyup#customerSearch':函数(事件、模板){
var关键字=template.find('#customerSearch').value;
如果(关键字){
如果(关键字长度>=3){
Meteor.subscribe('sessioncustomers',关键字);
}
}
}
发布使用此关键字返回记录

Meteor.publish(“sessioncustomers”,函数(关键字){ 如果(关键字){ 如果(关键字长度>=3){ query.name=newregexp(regExpQuoted(关键字),'i'); Customers.find(查询); }否则{ 返回null; } }否则{ 返回null; } }); 这个问题。 除非客户机更改关键字,或者更确切地说,当关键字更改时,出版物发布与关键字匹配的其他文档,但客户机集合从不删除旧文档,否则它将起作用并接收文档

如何从客户端集合中获取不再匹配的旧文档

我认为,由于订阅的参数已更改,非匹配文档将被取消订阅,而只有新的匹配文档将被订阅。

keyup
回调中,您需要“取消订阅”以前的出版物, 否则你将保留旧文件

var sessionCustomersHandler=false;
“keyup#customerSearch”:函数(事件、模板){
var关键字=template.find('#customerSearch').value;
如果(关键字和关键字长度>=3)
var newSessionCustomersHandler=Meteor.subscribe('sessioncustomers',关键字);
if(会话客户管理员)
sessionCustomersHandler.stop();
sessionCustomersHandler=newSessionCustomersHandler;
}
此外,为了安全起见,不要忘记在发布函数中检查(关键字、字符串)

Meteor.publish(“sessioncustomers”,函数(关键字){ 检查(关键字、字符串) 如果(关键字长度>=3) 返回客户。查找({ 名称:新RegExp(regExpQuoted(关键字),'i') }); });
创建本地未命名客户端集合

this.SessionCustomers = new Meteor.Collection(null);
调用服务器方法以获得所需的结果。清除回调(全部删除),然后插入到该本地集合

return Meteor.call('sessioncustomers', query, function(err, data) {
    if (err) {
      return console.log(err.message);
    } else {
        SessionCustomers.remove({});
        var item, _i, _len;

        for (_i = 0, _len = data.length; _i < _len; _i++) {
           item = array[_i];
           SessionCustomers.insert(item);
        }
    }
  });
return Meteor.call('sessioncustomers',query,function(err,data){
如果(错误){
返回console.log(错误消息);
}否则{
SessionCustomers.remove({});
风险值项目,i,len;
对于(_i=0,_len=data.length;_i<_len;_i++){
item=数组[_i];
会话客户。插入(项目);
}
}
});

句柄客户端似乎不支持stop方法。应在本地范围外定义变量。更新。我想知道,为了提高性能,您不应该在取消订阅旧订阅之前订阅新订阅吗?如果旧的和新的订阅包含一些相同的文档,这些文档将不会通过网络再次发送,对吗?@PeppeL-G是的,也许你是对的。需要做一些测试来验证这一点。无论如何,我已经更新了我的答案。@PeppeL-G您的笔记非常有用,因为它避免了大量数据密集型应用程序的开销-thx mquandalle用于相应更新。与此同时,在2015年,这似乎仍然如此。如果有人知道另一个解决方案,则最好进行进一步更新。
offer
offerCurrent
未使用?
array
应该是
data
?服务器端发生的更改不会使用此解决方案实时传播。谢谢!我想知道如何清除MiniMongo集合,而您只是将其设置为null。好极了我已经找了好几个星期了!