我有这个Meteor发布的数据库中的所有帖子。
我想仅在帖子的owner
字段为真时返回帖子的isAnonymous
字段(即如果帖子是匿名的,不发布所有者?
如何在Meteor / Mongodb中制作此条件?我在这里的脚本永远不会归还所有者。
Meteor.publish('posts', function(id) {
var posts = Posts.find({},{fields: {owner: 0}},{sort: {created_at: -1}});
return posts;
});
我试过这样的东西,但它不起作用
Meteor.publish('posts', function(id) {
var posts = Posts.find({},{fields: {owner: { $cond: [ { $eq: [ "isAnonymous", 1 ] }, 0, 1 ] }}},{sort: {created_at: -1}});
return posts;
});
答案 0 :(得分:2)
你似乎想要的是这样的:
Meteor.publish('posts',function(args) {
var self = this;
Posts.find().fetch().forEach(function(post) {
if ( post.hasOwnProperty("isAnonymous") ) {
if ( post.isAnonymous ) {
delete post.owner;
delete post.isAnonymous;
}
}
self.added("postsFiltered",post._id,post);
});
self.ready();
});
然后基本上在客户端中定义您的集合至少:
Posts = new Meteor.Collection("postsFiltered");
然后在您订阅后,客户端将只看到没有"隐私"信息,因为它总是以这种方式发布。
答案 1 :(得分:1)
如果您不想仅在某些情况下返回字段,则可以为集合定义转换函数。像这样:
Posts = new Mongo.Collection('posts', {
transform: function(doc) {
if (-- condition for not returning owner is true --) {
delete doc.owner;
}
}
});
如果您可以返回它,但在某些情况下不想显示它,您可以在模板中执行此操作:
{{#each posts }}
...
{{#if isOwnerKnown owner }}
{{ owner }}
{{/if }}
...
{{/foreach}}
Template.people.helpers({
isOwnerKnown: function(owner){
return owner != 'Anonymous';
}
...
});