用户名和图片评论的流星反应数据查询

时间:2015-02-04 22:53:03

标签: mongodb join meteor

我正在尝试在一个巨大的应用程序中实现一个评论系统,并且总是遇到交叉反应和出版物的问题。

具体问题:

当用户撰写评论时,我想显示用户的姓名和个人资料照片。评论在一个集合中,名称和图片在另一个集合中。

当我订阅此页面上的每个评论以及每个用户的id都在此页面的评论服务器中时,该应用程序不会更新添加新评论时客户端上可用的用户,因为“加入”在服务器上是非活动的。

当我在客户端上执行此操作时,我必须一直取消订阅并重新订阅,添加新评论并且负载会更高。

在流星中实施这样一个系统的最佳做法是什么?如何在没有大量过度发布的情况下解决这个问题?

1 个答案:

答案 0 :(得分:0)

由于目前还没有官方支持加入,在社区的所有解决方案中

我发现https://github.com/englue/meteor-publish-composite此软件包非常有用,我在我的应用程序中使用它。

此示例完全符合您的要求https://github.com/englue/meteor-publish-composite#example-1-a-publication-that-takes-no-arguments

Meteor.publishComposite('topTenPosts', {
    find: function() {
        // Find top ten highest scoring posts
        return Posts.find({}, { sort: { score: -1 }, limit: 10 });
    },
    children: [
        {
            find: function(post) {
                // Find post author. Even though we only want to return
                // one record here, we use "find" instead of "findOne"
                // since this function should return a cursor.
                return Meteor.users.find(
                    { _id: post.authorId },
                    { limit: 1, fields: { profile: 1 } });
            }
        },
        {
            find: function(post) {
                // Find top two comments on post
                return Comments.find(
                    { postId: post._id },
                    { sort: { score: -1 }, limit: 2 });
            },
            children: [
                {
                    find: function(comment, post) {
                        // Find user that authored comment.
                        return Meteor.users.find(
                            { _id: comment.authorId },
                            { limit: 1, fields: { profile: 1 } });
                    }
                }
            ]
        }
    ]
});

//客户端

Meteor.subscribe('topTenPosts');

主要是被动