gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:22:06 24 4
gpt4 key购买 nike

我有一种情况,我需要两次订阅同一个集合。我的服务端代码中的两个publish方法如下:

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

我的问题是订阅后在客户端看不到完整的文档。我认为这是因为它们被只发布简短版本的方法所覆盖。

当我不需要它们时,我不想用长数组堵塞我的客户端内存,但我确实希望它们在我需要它们时可用。

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

我该如何正确处理这种情况?

最佳答案

TL/DR - 跳到第三段。

我推测这是因为发布函数认为 very_long_array字段已经发送给客户端,所以它不会再次发送。您必须摆弄一下来确认这一点,但是在同一字段上发送不同的数据必然会导致一些问题。

就订阅两个集合而言,您不应该这样做,因为需要向客户端和服务器端集合对象提供唯一的 mongo 集合名称。在实践中,您可以通过将一个客户端订阅设为假 remote subscription via DDP 来做一些非常棘手的事情。并让它填充一个完全独立的 Javascript 对象。然而,这不可能是最好的选择。

这种情况可以通过在同一领域以外的其他方面发布您的摘要来解决。不幸的是,从发布函数返回游标时您不能使用转换(这是最简单的方法),但您有两个选择:

  • 使用 low-level publications API详见 this answer .
  • 使用 collection hooks每当 very_long_array_summary 时,用数组中的第一项填充另一个字段(如 very_long_array )更改并仅发布先前出版物中的摘要字段。
  • 关于Meteor - 两次订阅同一个集合 - 将结果分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27157950/

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