1

2 つのコレクションを持つアプリがあります

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のドキュメントを見てきましたが、この場合の使い方は本当にわかりません。私もこの答えを研究しましたが、すべてを理解していません。その回答のどの部分について質問があるかを喜んで説明しますが、それは少し異なるケースであるため、関連性があるかどうかはわかりません。とにかく、これまたは実際の例に関するガイダンスをいただければ幸いです。

4

1 に答える 1