我可以用facebook作为例子解释我的问题,
带一个新闻摘要(一个帖子),其中有
内容后,图像,视频
喜欢,评论份额
我正在保存post_content,图片,视频(仅限网址),并在一个名为帖子
的集合中计数以及其他名为 post_likes
的集合中的所有喜欢现在在时间轴上我从db
获得了前10个帖子Posts.find({},{sort: {createdAt: -1}}.limit(10)
现在,每当用户点击时,我就会调用一个方法将userid插入到集合中
post_likes.update({post_id:id},{$push:{userids: this.userId}})
post_likes object
{_id:"xxxx",post_id:"Id of the post",userids:["xxx","yyy",....]
我正在使用
在我的模板中显示{{#each posts}}
.............
.........
........
.......
{{#if likes}}
//show dislike button
{{else}}
//show like button
{{/if}}
{{/each}}
我的问题是
我想知道当前用户是否喜欢特定的帖子。
我无法将所有likes_users加载到客户端并检查。
所以我想只发布一个从数组到客户端的值
怎么做?
或者是否有任何替代方法可以做到这一点,任何想法都是受欢迎的,也是值得关注的。
答案 0 :(得分:1)
有几种选择:
为每位用户发布 post_likes :
Meteor.publish('user_post_likes', function() {
return post_likes.find({userids: this.userId});
});
将帖子ID附加到用户文档,反之亦然:
post_likes.update({post_id:id},{$push:{userids: this.userId}}); // AND
Meteor.users.update({_id: this.userId}, {$push: {'profile.post_likes': id}});
然后,您将拥有Meteor自动订阅的用户文档中已有的喜欢。如果需要,您可以使用 matb33:collection-hooks 之类的东西来保持两个集合同步。
编写一种方法来按需检索喜欢的帖子:
Meteor.methods({
get_liked_posts: function() {
return post_likes.find({userids: this.userId});
}
});
第三个不那么“流星”,但如果有很多用户订阅他们自己的posts_likes订阅独立是服务器的辛苦工作可能更好。但是,在这种情况下,可能更喜欢选项2。