0

我有一个格式如下的 mongo 文档:

Group: {
    participants: [
        userId,
        userId,
        userId
    ]
}

...其中 userIds 显然是 Meteor 自己的用户文档 ObjectIds。

我真正遇到的问题是我希望用户查看他们组中的其他用户信息。在这个实现中,我正在想象一个安全的(阅读:我删除了自动发布和不安全的)组消息系统。

我当前的发布实现如下所示:

//grab all groups user belongs to
Meteor.publish("groups", function() {
    var groups = Groups.find({
        participants: {
            $in: [ this.userId ]
        }
    });
    return groups;
});

现在,理想情况下,我希望groups在完成发布之前实现一些代码来操作,以便同时发布每个参与者的user.profile数据。想象的最终格式如下:

Group: {
    participants: {
        userId
    },
    users: {
        {   //One of these for each user
            userId,
            firstName,
            lastName,
            otherData
        }
    }
}

我注意到的一件事是,如果没有自动发布和不安全,我不能只通过辅助函数在客户端上执行此操作。

4

1 回答 1

1

这是reywood:publish-composite包的一个相当简单的用例:

Meteor.publishComposite('groups', {
    find: function() {
        return Groups.find({ participants: { $in: this.userId }});
    },
    children: [
        {
            find: function(group) {
                return Meteor.users.find(
                    { _id: { $in: group.participants },
                    { fields: { firstName: 1, lastName: 1, otherData: 1 }});
            }
        },
    ]
});

请注意,_id始终包含用户字段,您无需在fields:列表中显式调用它。

于 2016-03-24T17:54:05.527 回答