流星订阅问题

Meteor subscription issue

我的 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();

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

我该如何解决这个问题?

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

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

基本思想是将查询部分作为服务器和客户端的通用代码,因此它是自一致的。