我非常喜欢将{
_id: "1234",
guilds: [
{ slug: 'ascension' },
{ slug: 'warlords-of-draenor' },
{ slug: 'archers-anonymous' }
]
}
用于我所拥有的非常复杂的出版物。但是,我有一个需要过滤数组的情况。必须将数组筛选为仅当前用户和已发布用户都属于的角色。示例文档:
Meteor.publish('player', function (id) {
check(id, String);
const allRoles = Roles.getAllRoles().map(role => role.name);
const handle = Meteor.users.find(id).observe({
added: doc => {
doc.guilds = doc.guilds.filter(guild => Roles.userIsInRole(this.userId, allRoles, guild.slug));
this.added('users', doc._id, doc);
}
});
this.ready();
this.onStop(() => handle.stop());
});
如果我要正常发布播放器,我可以为光标执行以下操作。
{{1}}
问题是,我不认为我可以将它与发布复合集成,因为它不会返回光标以传递给子节点。
是否有解决方案可以在将文件传递给孩子之前更改文件?
答案 0 :(得分:0)
有时我的查询/过滤器选项很复杂,我经常将它插入临时集合,然后从中查询和发布。 在你的情况下,我认为你可以尝试将结果插入临时收集,如guild-temp。
Meteor.publish('player', function (id) {
check(id, String);
const allRoles = Roles.getAllRoles().map(role => role.name);
const handle = Meteor.users.find(id).observe({
added: doc => {
doc.guilds = doc.guilds.filter(guild => Roles.userIsInRole(this.userId, allRoles, guild.slug));
this.added('users', doc._id, doc);
}
//insert handle result to temp-collection
TempCollection.insert(handle...);
return TempCollection.find(condition)...
this.ready();
this.onStop(() => handle.stop());
});