【问题标题】:Meteor - How do you exclude properties in a child collection from being published?Meteor - 如何将子集合中的属性排除在发布之外?
【发布时间】:2015-05-20 08:05:29
【问题描述】:

假设您有一个类似于以下的集合...

Tests = [
  {
    name: 'Some Test',
    questions: [
      { question: 'Answer to life, the universe, and everything?', answer: '42' },
      { question: 'What is your favorite color?', answer: 'Blue' },
      { question: 'Airspeed velocity of unladen European Swallow?', answer: '24 mph' }
    ]
  }
]; 

除了 answer 属性之外,您如何发布整个集合?

我了解您可以执行以下操作以从发布中省略属性...

Meteor.publish('tests', function() {
  return Tests.find({}, {fields: {name:0}});
});

但我不确定如何从数组属性中省略一个属性。

谢谢!

【问题讨论】:

  • 应该是return Tests.find({}, {fields: {'questions.$.answer':0}}); 之类的,不过好像还不支持

标签: meteor publish


【解决方案1】:

无法按照您想要的方式完成。 Meteor 仅支持 1 级深度的字段说明符。您有时可以让子字段说明符起作用,但这并不可靠。

您可以使用 testId 字段将您的问题放入他们自己的集合中,该字段将它们链接回测试的关系样式。每个文档一个问题,然后您可以指定仅发布问题字段。

Meteor.publish ('questions', function(testId) {
    return Questions.find({testId: testId}, {fields: {question: 1}})
});

这并不理想,但与试图找到一种让您的问题存在于测试文档中的解决方法相比相当轻松。

可能有一种方法可以通过更复杂的发布手动执行此操作。有一个 similar question here 有一个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 2016-05-04
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多