我有一个包含帖子的集合。
帖子文档包含模糊且无模糊的图像(文档中的 blurImage 和图像键)。
如果当前用户是帖子的所有者或当前用户已购买内容,则可以将图像密钥推送到客户端。
如果不是这种情况,则无法按下图像键(因为安全性)。否则,任何人都可以查询本地mongo并查看完整的图片网址,而他们并没有为此付费。
现在我的问题是。在发布方法中进行此类字段选择的最佳方法是什么?
我没有看到进行条件字段选择的方法。
任何想法?
答案 0 :(得分:0)
在您的出版物中:
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* });
答案 1 :(得分:0)
这实际上有点棘手,因为需要根据另一个字段(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];
});
其中foo
和bar
是您要在任何一种情况下返回的键。
@sdybskiy请注意,您不能在一个查询中混合字段包含和排除。包含意味着排除所有其他字段,反之亦然。