Meteor发布中通过id链接用户

Linking users by id in Meteor publish

本文关键字:链接 用户 id 布中通 Meteor      更新时间:2023-09-26

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

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

其中userId显然是Meteor自己的用户文档的ObjectId。

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

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

//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
        }
    }
}

我注意到的一件事是,如果没有自动发布和不安全性,我就不能通过助手函数在客户端上完成这项工作。

这是reywood:publish复合包的一个相当简单的用例

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:列表中显式调用它。