限制mongo动态返回的字段

时间:2016-08-28 17:55:28

标签: javascript node.js mongodb meteor

我使用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不等,它会变成一个大的列表。

我真的希望你可以帮助我解决这个问题。我该怎么做才能解决问题?

1 个答案:

答案 0 :(得分:1)

使用直接控制的发布功能(this.added/removed/changed方法)的典型示例。 请参阅http://docs.meteor.com/api/pubsub.html#Meteor-publish页面上的第二个示例块。

使用此模式,您可以完全控制发布的时间和内容。