我正在尝试找出在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);
}
});
目前我正在发布所有帖子,但想知道这是否也是最佳方式。
答案 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。