javascript - 限制 mongo 动态返回的字段

标签 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"
        }
    }
}

我现在想做的是:

  • 不要返回“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/

相关文章:

javascript - jQuery iframe 加载 JavaScript 内容 - 上下文

javascript - 我应该为内存性能静态分配 Javascript 字符串吗?

java - 使用 java 查看 .bson 文件的内容

javascript - 在 MongoDB/Meteor 中使用 elemMatch 查找嵌套数组数据

ruby-on-rails-3 - 如何将日志记录级别设置为 MongoDb 的信息?

Javascript Infovis Toolkit 的 Spacetree 示例无法在本地运行

javascript - 如何在 Vue.js 中传递 $router.push 中的数据?

javascript - 在 Highcharts 中缩放时获取选定的点索引

javascript - 如何找出YouTube上关注者的确切人数?

javascript - MIGS支付中的Hmac在php和Node.js中的不同