Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor-订阅同一个集合两次-将结果分开?_Meteor_Publish Subscribe - Fatal编程技术网

Meteor-订阅同一个集合两次-将结果分开?

Meteor-订阅同一个集合两次-将结果分开?,meteor,publish-subscribe,Meteor,Publish Subscribe,我有一种情况,我需要订阅同一个收藏两次。我的服务器端代码中的两种发布方法如下: Meteor.publish(“选定的完整收藏”,功能(重要的id列表){ 检查(重要的\u id\u列表,Match.Any);//应该做更好的检查 //这将返回完整的文档,包括它包含的非常长的数组 返回MyCollection.find({ 重要标识:{$in:important\u id\u list} }); }); Meteor.publish(“all\u-brief\u-mycollection”,函数

我有一种情况,我需要订阅同一个收藏两次。我的服务器端代码中的两种发布方法如下:

Meteor.publish(“选定的完整收藏”,功能(重要的id列表){
检查(重要的\u id\u列表,Match.Any);//应该做更好的检查
//这将返回完整的文档,包括它包含的非常长的数组
返回MyCollection.find({
重要标识:{$in:important\u id\u list}
});
});
Meteor.publish(“all\u-brief\u-mycollection”,函数(){
//这将返回所有文档,但仅返回id和数组中的第一项
返回MyCollection.find({},{字段:{
重要提示:1,
非常长的数组:{$slice:1}
}});
});
我的问题是,在我订阅了完整的文档之后,在客户端看不到它们。我认为这是因为它们被只发布简短版本的方法过度编写了

我不想在不需要长数组时用长数组阻塞客户机内存,但我确实希望在需要时它们可用

简短版本在启动时订阅。当用户访问深入了解更多信息的模板时,将订阅完整版本


如何正确处理这种情况?

TL/DR-跳到第三段

我推测这是因为publish函数认为
很长的数组
字段已经发送到客户端,所以它不会再次发送。要确认这一点,您需要花点时间,但在同一字段上发送不同的数据肯定会导致一些问题

就订阅两个集合而言,您不应该这样做,因为需要向客户端和服务器端集合对象提供唯一的mongo集合名称。实际上,通过将一个客户端订阅设置为假的,并让它填充一个完全独立的Javascript对象,您可能能够做一些真正骇客的事情。然而,这不是最好的选择

这种情况可以通过在同一字段以外的内容上发布摘要来解决。不幸的是,从发布函数返回游标时不能使用转换(这是最简单的方法),但有两个选项:

  • 按照中的详细说明使用
  • 用于在
    超长数组
    更改时,使用数组中的第一项填充另一个字段(如
    超长数组
    ),并仅发布前一次发布中的摘要字段

  • 第三个选项可能是将长版本发布到仅在客户端上为此目的而存在的其他集合。您可能想查看《发现流星》(Discovery Meteor)的“高级酒吧/酒吧”(Advanced Pub/Sub)一章(上一小节)。

    更精确的链接:帮助我获得了类似的结果。