从文档中查找和限制数组中的数组值

时间:2015-01-27 09:56:12

标签: mongodb meteor

我可以用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加载到客户端并检查。

所以我想只发布一个从数组到客户端的值

怎么做?

或者是否有任何替代方法可以做到这一点,任何想法都是受欢迎的,也是值得关注的。

1 个答案:

答案 0 :(得分:1)

有几种选择:

  1. 为每位用户发布 post_likes

    Meteor.publish('user_post_likes', function() {
        return post_likes.find({userids: this.userId});
    });
    
  2. 将帖子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 之类的东西来保持两个集合同步。

  3. 编写一种方法来按需检索喜欢的帖子:

    Meteor.methods({
        get_liked_posts: function() {
            return post_likes.find({userids: this.userId});
        }
    });
    
  4. 第三个不那么“流星”,但如果有很多用户订阅他们自己的posts_likes订阅独立是服务器的辛苦工作可能更好。但是,在这种情况下,可能更喜欢选项2。