我正在使用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();
});