在 Meteor publish 中通过 id 链接用户
Linking users by id in Meteor publish
我有一个 mongo 文件,格式如下:
Group: {
participants: [
userId,
userId,
userId
]
}
...其中用户 ID 显然是 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-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:
列表中显式调用它。
我有一个 mongo 文件,格式如下:
Group: {
participants: [
userId,
userId,
userId
]
}
...其中用户 ID 显然是 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-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:
列表中显式调用它。