流星订阅问题

时间:2015-09-23 01:12:37

标签: mongodb meteor publish-subscribe

我的mongodb上有一组消息。

我创建了两个发布函数:

Meteor.publish("messages", function (self, buddy) {
  check(self, String);
  check(buddy, String);
  return Messages.find({participants: {$all : [self, buddy] }});
});

和,

Meteor.publish("conversations", function(self){
    check(self, String);
    return Messages.find(   
        { participants: { $in : [self] } }, 
        { participants: { $elemMatch: { $ne: self } }, messages: { $slice: -1 }} 
    );
});

我在客户端订阅了这两个:

Meteor.subscribe("conversations", user);
return Messages.find();

和,

Meteor.subscribe("messages", user, buddy);
return Messages.find();

订阅位于不同的模板中。 问题是,当我从conversation订阅返回数据时,数据与messages订阅的数据相同。我在两个订阅中都看到相同的结果,即使它们有不同的查询...

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是正常行为,同一个集合包含两个订阅的数据。您还需要在客户端上进行过滤。

https://www.discovermeteor.com/blog/query-constructors/概述了处理此问题的模式。

基本思想是将查询部分作为服务器和客户端的公共代码,使其自我一致。