Реактивность метеорного сервера

У меня есть приложение с двумя коллекциями

Books = new Meteor.Collection("books");
Chapters = new Meteor.Collection("chapters");

где документы выглядят примерно так:

Book = {
  _id : BookId,
  users_who_can_view_this_book : [userId, userId]
}

Chapter = {
  book : BookId
}

На сервере я публикую книги и главы, например:

Meteor.publish('books', function() {
  return Books.find({ users_who_can_view_this_book : { $in : [this.userId] } });
});

Meteor.publish('chapters', function() {
  var bookIds = Books.find({
    users_who_can_view_this_book : {$in : [this.userId] }
  }).map(function(book) {
    return book._id;
  });
  return chapters.find({book: {$in : bookIds}});
});

На клиенте я просто подписываюсь так:

Meteor.subscribe('books');
Meteor.subscribe('chapters')

Итак, если у пользователя есть доступ к книге, я хочу, чтобы клиент получил книгу и соответствующие главы. Это отлично работает при начальной загрузке.

Теперь насервер Я хочу иметь возможность добавлять или удалять пользователей в / из списка в документах книги, а когда я это делаю, обновлять клиента новыми главами. На данный момент клиент получает только обновление книг, но главы, относящиеся к этой книге, не добавляются и не удаляются из клиента.

Я понимаю, что мне нужно изменить способ публикации моих глав. Я посмотрел на документы для cursor.observe и cursor.observeChange, но я действительно не могу понять, как использовать их в этом случае. Я также изучалэтот ответ но я не понимаю всего этого. Я был бы рад объяснить, о каких частях этого ответа у меня есть вопросы, но так как это немного другой случай, я не знаю, имеет ли это отношение. В любом случае, некоторые рекомендации по этому или рабочему примеру будут высоко оценены!

Ответы на вопрос(1)

Ваш ответ на вопрос