Как правильно использовать this.added

Я пытаюсь опубликовать коллекцию и хочу добавить поле, которого в коллекции нет. Возможно, я ошибаюсь, но я подумал, что могу использовать this.added() для добавления полей в опубликованную коллекцию. Может кто-нибудь показать мне, что я делаю неправильно

Meteor.publish('job.view-open-to-candidate', function(jobCollectionId) {
  const job = Jobs.find({ _id: jobCollectionId }, {
    fields: {
      candidateApplication: 0
    }
  });

  this.added('job', jobCollectionId, {testNewField: 'test'})

  return job;
});

person bp123    schedule 18.10.2017    source источник
comment
Это на правильном пути? /использование-этого-добавленного-в-метеоре   -  person Mikkel    schedule 18.10.2017
comment
Да, я пытался реализовать это раньше, но безуспешно. Я не уверен, почему? @Миккель   -  person bp123    schedule 18.10.2017


Ответы (1)


Если вы хотите изменить документы в публикации, вы должны использовать Cursor.observe() или Cursor.observeChanges().

Наиболее распространенный шаблон для этого (с необходимой модификацией):

Meteor.publish('job.view-open-to-candidate', function(jobCollectionId) {
  const publication = this;

  const handle = Jobs.find({ _id: jobCollectionId }, {
    fields: {
      candidateApplication: 0
    }
  }).observeChanges({
    added(_id, fields) {
      const newFields = fields;
      newFields.testNewField = 'test';
      publication.added('jobs', _id, newFields);
    },

    changed(_id, fields) {
      const newFields = fields;
      newFields.testNewField = 'test';
      publication.changed('jobs', _id, newFields);
    },

    removed(_id) {
      publication.removed('jobs', _id);
    },
  });

  this.ready();

  this.onStop(() => {
    handle.stop();
  });
});
person Styx    schedule 19.10.2017
comment
Мне нужно пройти это шаг за шагом, чтобы понять, как это работает, но это работает. Спасибо за публикацию! - person bp123; 20.10.2017
comment
Один вопрос. Это работает, однако внутри кода вы ничего не возвращаете. Можете ли вы пролить свет на то, как это работает? - person bp123; 20.10.2017