从用户数组订阅帖子

时间:2015-03-18 20:11:31

标签: meteor

我正在尝试找出在Meteor应用程序中发布和订阅某些作者的帖子的最佳方式。我目前有一个用户设置,其中ID的列表存储在数组“friendsList”中。理想情况下,我想知道用户只从该阵列中的人订阅帖子的最佳方式。

以下是用户在Mongo中的样子:

{ "_id" : "aLxQ2Rx7PfMLB4Ywe", "createdAt" : ISODate("2015-03-18T06:07:40.973Z"), 
"profile" : { 
    "facebookId" : "1380125628976610", 
        "friendsList" : [  "1377888062534633", "1377888062534443" ], 
        "name" : "Charlie Amicgeegfkb Fallersky" }, 
        "services" : { 
            "facebook" : { "accessToken" : "CxI", "expiresAt" : 1431821993739, "id" : "1380125628976610",
             "email" : "ucymsfy_fallersky_1426550919@tfbnw.net", 
             "name" : "Charlie Amicgeegfkb Fallersky", "first_name" : "Charlie", 
             "last_name" : "Fallersky", 
             "link" : "https://www.facebook.com/app_scoped_user_id/1380125628976610/", 
             "gender" : "male", "locale" : "en_US" }, 
        "resume" : { 
            "loginTokens" : [   {   "when" : ISODate("2015-03-18T06:07:40.977Z"),   
            "hashedToken" : "jVUmNuzQ1oloWi24KVgvlcbxG8hCPTWn22CTlJnPJEs=" } ] } } }

我最理想的是在路由器级别:

Router.configure({
    layoutTemplate: 'layout',
    loadingTemplate: 'loading',
    notFoundTemplate: 'notFound',
    waitOn: function(){ 
        return 
            //Meteor.subscribe(to all the posts where from people in the friends list);
}
});

目前我正在发布所有帖子,但想知道这是否也是最佳方式。

1 个答案:

答案 0 :(得分:1)

您可以编写如下发布函数:

Meteor.publish('postsByFriends', function() {
  var user = Meteor.users.findOne(this.userId);
  var friends = user.profile.friendsList || [];
  return Posts.find({author: {$in: friends}});
});

请注意,此发布不是被动的,因此如果用户在订阅运行时添加了一个恶魔,则不会发布这些帖子。有关反应性连接的更多信息,请参阅this question