流星:根据客户端的出版物来过滤文档

时间:2015-06-02 07:15:44

标签: meteor collections meteor-publications

我遇到了以下问题:

  • 我有一个自定义服务器端出版物" P1"它从集合" C"返回一组文档,服务器是唯一能够构建此子集的文档

  • 在我的客户端,我订阅了2个出版物(" P1"和#34; P2"),返回了2个集合的子集" C",他们可能重叠。

  • 我想在我的客户端上只列出出版物" P1"即服务器只能生成该集合的那个。问题是我无法使用常规查找查询来过滤集合" C"得到子集" P1"。这是因为只有服务器能够任意执行。

我如何根据其出版物来源在客户端过滤文件?

2 个答案:

答案 0 :(得分:0)

据我所知,你不能直接这样做。

可能的解决方案可能是使用Meteor方法请求发布所需的ID,然后使用这些ID进行订阅,然后您可以使用已有的ID列表过滤客户端。

答案 1 :(得分:0)

Meteor将自动在单个实例中发布正确的文档(因此它们不会发布两次)。

因此,客户端实际上无法区分,因为服务器不会清楚地表明集合重叠。

除了使用像Elizier建议的方法之外别无他法:

Meteor.methods({
    differences: function() {

        var queryOne = _(MyCollection.find({..}).fetch()).pluck("_id");
        var queryTwo = _(MyCollection.find({..}).fetch()).pluck("_id");

        var differences = _([queryOne, queryTwo]).difference();
        var intersection = _([queryOne, queryTwo]).intersection();

        return differences
    }
});