Reaktywność serwera meteorowego

Mam aplikację z dwiema kolekcjami

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

gdzie dokumenty wyglądają mniej więcej tak:

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

Chapter = {
  book : BookId
}

Na serwerze publikuję takie książki i rozdziały:

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

Na kliencie po prostu subskrybuję w ten sposób:

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

Jeśli więc użytkownik ma dostęp do książki, chcę, aby klient otrzymał książkę i odpowiadające jej rozdziały. Działa to dobrze przy pierwszym załadowaniu.

Teraz naserwer Chcę mieć możliwość dodawania lub usuwania użytkowników do / z listy w dokumentach książki, a kiedy to robię, zaktualizuj klienta o nowe rozdziały. Obecnie klient otrzymuje aktualizację tylko w książkach, ale rozdziały dotyczące tej książki nie są dodawane / usuwane z klienta.

Rozumiem, że muszę zmienić sposób, w jaki działa moja publikacja rozdziałów. Sprawdziłem docs dla cursor.observe i cursor.observeChange, ale naprawdę nie mogę zrozumieć, jak ich użyć w tym przypadku. Studiowałem równieżta odpowiedź ale nie mam tego wszystkiego. Z przyjemnością wyjaśnię, na które części tej odpowiedzi mam pytania, ale ponieważ jest to nieco inny przypadek, nie wiem, czy jest to istotne. W każdym razie, niektóre wskazówki na ten lub przykład pracy byłyby bardzo mile widziane!

questionAnswers(1)

yourAnswerToTheQuestion