Reatividade do servidor Meteor

Eu tenho um aplicativo com duas coleções

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

onde os documentos se parecem muito com isso:

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

Chapter = {
  book : BookId
}

No servidor eu publico livros e capítulos assim:

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

No cliente eu acabei de me inscrever assim:

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

Então, se um usuário tiver acesso a um livro, eu quero que ele receba o livro e seus capítulos correspondentes. Isso funciona bem na carga inicial.

Agora, noservidor Eu quero ser capaz de adicionar ou remover usuários para / da lista nos documentos do livro e quando eu faço isso, atualizo o cliente com os novos capítulos. A partir de agora, o cliente só obtém a atualização nos livros, mas os capítulos referentes a esse livro não são adicionados / removidos do cliente.

Eu entendo que preciso mudar a forma como a publicação dos meus capítulos funciona. Eu olhei para os docs para cursor.observe e cursor.observeChange, mas eu realmente não consigo entender como usá-los neste caso. Eu também estudeiesta resposta mas eu não entendo tudo. Eu ficaria feliz em explicar em que partes da resposta eu tenho perguntas, mas como é um caso um pouco diferente, não sei se é relevante. De qualquer forma, alguma orientação sobre isso ou um exemplo de trabalho seria muito apreciada!

questionAnswers(1)

yourAnswerToTheQuestion