我使用Meteor来查询mongo集合。它有例如以下条目:
{
"_id": "uCfwxKXyZygcWQeiS",
"gameType": "foobar",
"state": "starting",
"hidden": {
"correctAnswer": "secret",
"someOtherStuff": "foobar"
},
"personal": {
"Y73uBhuDq2Bhk4d8W": {
"givenAnswer": "another secret",
},
"hQphob8s92gbEMXbY": {
"givenAnswer": "i have no clue"
}
}
}
我现在要做的是:
在代码中它看起来像这样:
Meteor.publish('game', function() {
this.related(function(user) {
var fields = {};
fields.hidden = 0;
fields.personal = 0;
fields['personal.' + this.userId] = 1;
return Games.find({}, {fields: fields});
}, Meteor.users.find(this.userId, {fields: {'profile.gameId': 1}}));
}
显然这不起作用,因为MongoDB不会允许混合包含和排除。另一方面,我不能切换到"只指定包含的字段",因为它们可以从gameType到gameType不等,它会变成一个大的列表。
我真的希望你可以帮助我解决这个问题。我该怎么做才能解决问题?
答案 0 :(得分:1)
使用直接控制的发布功能(this.added/removed/changed
方法)的典型示例。
请参阅http://docs.meteor.com/api/pubsub.html#Meteor-publish页面上的第二个示例块。
使用此模式,您可以完全控制发布的时间和内容。