jon*_*omo 6 publish-subscribe meteor
我有一种情况,我需要两次订阅相同的集合.我的服务器端代码中的两个发布方法如下:
Meteor.publish("selected_full_mycollection", function (important_id_list) {
check(important_id_list, Match.Any); // should do better check
// this will return the full doc, including a very long array it contains
return MyCollection.find({
important_id: {$in: important_id_list}
});
});
Meteor.publish("all_brief_mycollection", function() {
// this will return all documents, but only the id and first item in the array
return MyCollection.find({}, {fields: {
important_id: 1,
very_long_array: {$slice: 1}
}});
});
Run Code Online (Sandbox Code Playgroud)
我的问题是,在订阅它们之后,我没有在客户端看到完整的文档.我认为这是因为它们被仅发布简短版本的方法所覆盖.
当我不需要时,我不想用长数组堵塞我的客户端内存,但我确实希望它们在我需要时可用.
简要版本在启动时订阅.当用户访问深入了解更多洞察力的模板时,将订阅完整版本.
我该如何妥善管理这种情况?
TL/DR - 跳到第三段。
我推测这是因为发布函数认为该very_long_array字段已经发送到客户端,因此不会再次发送。您必须花点时间来确认这一点,但在同一字段上发送不同的数据必然会导致一些问题。
就订阅两个集合而言,您不应该能够执行此操作,因为需要向客户端和服务器端集合对象提供唯一的 mongo 集合名称。在实践中,您可能可以通过 DDP 将一个客户端订阅设置为虚假的远程订阅,并让它填充一个完全独立的 Javascript 对象,从而做一些非常黑客的事情。然而,这并不是最好的选择。
这种情况可以通过在同一领域以外的其他地方发布您的摘要来解决。不幸的是,从发布函数返回游标时您不能使用转换(这将是最简单的方法),但您有两个选择:
very_long_array_summary数组中的第一项填充到另一个字段(例如 )very_long_array,并仅发布前一个出版物中的摘要字段。