我正在使用publish-composite执行反应式联接(我确定特定的程序包无关紧要)。而且我看到中间数据被推送到客户端。

在以下示例中:

Meteor.publishComposite('messages', function(userId) {
  return {
    find: function() {
      return Meteor.users.find(
        { 'profile.connections.$': userId }
      );
    },
    children: [{
      find: function(user) {
        return Messages.find({author: user._id});
      }
    }]
  }
});


profile.connections中具有userId的所有用户都可以访问该客户端。我知道可以创建一个mongodb投影,这样敏感的东西就不会暴露出来。但是我想知道是否可以完全阻止第一个find()查询游标到达客户端。

最佳答案

您是否仅尝试为特定用户发布消息(如果该用户与登录用户有联系)?如果是这样,也许这样的事情会起作用:

Meteor.publishComposite('messages', function(userId) {
  return {
    find: function() {
      return Meteor.users.find(this.userId);
    },
    children: [{
      find: function(user) {
        return Meteor.users.find(
          { 'profile.connections.$': userid }
        );
      },
      children: [{
        find: function(connection, user) {
          return Messages.find({author: connection._id});
        }
      }]
    }]
  };
});


那将相当于:

Meteor.publish('message',function(userId) {
  var user = Meteor.users.find({_id : this.userId, 'profile.connections.$' : userId});

  if (!!user) {
    return Messages.find({author: userId});
  }

  this.ready();
});

10-06 04:18