【问题标题】:Meteor field selection based on criteria基于标准的流星场选择
【发布时间】:2016-12-13 18:54:37
【问题描述】:

我有一个包含帖子的集合。

发布文档包含模糊和非模糊图像(blurredImageimage 键在文档中)。

如果当前用户是帖子的所有者或当前用户已购买内容,则可以将图像密钥推送给客户端。

如果不是这种情况,则无法推送图像密钥(出于安全考虑)。否则任何人都可以只查询本地 mongo 并查看完整的图像 url,而他们没有为此付费。

现在我的问题是。在发布方法中进行这种字段选择的最佳方法是什么?

我看不到进行条件字段选择的方法。

有人有什么想法吗?

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    在您的出版物中:

    const user = Meteor.users.findOne(this.userId);
    if (user.hasPermissionToViewImage) return Documents.find({}, { fields: image: 1, *everything else you need* });
    return Documents.find({}, { fields: image: 0, *everything else you need* });
    

    【讨论】:

      【解决方案2】:

      这实际上有点棘手,因为需要根据另一个字段(ownerId)对每个图像评估条件。但是,您可以在您的出版物中返回一个游标数组,每个游标都有自己的查询条件和字段过滤器。在你的情况下:

      Meteor.publish('myPublication',()=>{
        const ownedByMe = Posts.find({ ownerId: this.userId },{ fields: { image: 1, foo: 1, bar: 1 }});
        const notOwnedByMe = Posts.find({ ownerId: { $ne: this.userId }},{ fields: blurredImage: 1, foo: 1, bar: 1 }});
        return [ownedByMe,notOwnedByMe];
      });
      

      其中foobar 是您希望在任一情况下返回的键。

      @sdybskiy 请注意,您不能在一个查询中混合使用字段包含和排除。包含意味着排除所有其他字段,反之亦然。

      【讨论】:

        猜你喜欢
        • 2015-08-24
        • 1970-01-01
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        相关资源
        最近更新 更多