2015-08-08 43 views
1

我有这个流星发布的数据库中的所有职位。 我想回国后的owner场仅在后的isAnonymous场是真(即如果该信息是匿名的,不公布的主人?限制Mongodb字段有条件在流星发布

如何使这个状态流星/ 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

您不能在'.find()'' – styvane

回答

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'; 
    } 
    ... 
}); 
+0

中使用'$ cond'虽然所有者仍然会被发布,但这是非常不安全的,并且可以在控制台上访问 – Giovanni

+0

请查看我的更新回答。 – GPicazo

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"); 

然后,您订阅后,客户端将只看到没有“隐私”信息的数据,因为它始终以这种方式发布。