我使用 Meteor 来查询 mongo 集合。例如,它具有以下条目:
{
"_id": "uCfwxKXyZygcWQeiS",
"gameType": "foobar",
"state": "starting",
"hidden": {
"correctAnswer": "secret",
"someOtherStuff": "foobar"
},
"personal": {
"Y73uBhuDq2Bhk4d8W": {
"givenAnswer": "another secret",
},
"hQphob8s92gbEMXbY": {
"givenAnswer": "i have no clue"
}
}
}
我现在想做的是:
- 不要返回“hidden”后面的值
- 从“个人”嵌入文档仅返回请求用户的值
在代码中它看起来像这样:
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 不允许混合包含和排除。另一方面,我无法切换到“仅指定包含的字段”,因为它们可能因游戏类型而异,并且会变成一个很大的列表。
我真的希望你能帮助我摆脱这个困境。我该怎么做才能解决这个问题?
最佳答案
在何处使用直接控制的发布功能(this.add/removed/changed
方法)的典型示例。
请参阅页面下方的第二个示例 block http://docs.meteor.com/api/pubsub.html#Meteor-publish .
通过这种模式,您可以完全控制发布的时间和内容。
关于javascript - 限制 mongo 动态返回的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39194212/