0

コレクションから一連のドキュメントを提供する出版物を作成する必要があります。ここでは、ドキュメントが互いにどのように関連しているかを確認できます。

{ 
    "_id" : "peRuJcPMDzZgTvWSX", 
    "author" : "author", 
    "type" : "article", 
    "parent" : "mnfTFfZ7Fqcu6ZJ7T", 
    "ancestors" : [ "hbSycmNNvmdqvpchX", "mnfTFfZ7Fqcu6ZJ7T" ] 
}
{ 
    "_id" : "mnfTFfZ7Fqcu6ZJ7T", 
    "article" : "article", 
    "parent" : "hbSycmNNvmdqvpchX", 
    "ancestors" : [ "hbSycmNNvmdqvpchX" ] 
}
{ 
    "_id" : "hbSycmNNvmdqvpchX", 
    "title" : "title", 
    "ancestors" : [ ] 
}

したがって、私が知っているのは最初のドキュメントの ID であり、パブリケーション内のすべての祖先も必要です。

Meteor.publish('list', function(id) {
    check(id, String);
    return Collection.find({}); // WRONG: gives me ALL documents
    return Collection.find({ _id: id }) // WRONG: gives me only the first document (main)
    // NEEDED: Main document and all ancestors
});
4

2 に答える 2

0

このpublish-compositeを使用して、Meteorで結合関係を公開できます。

Meteor.publishComposite('list', function(id) {
  // checking here ...

  return {
    find() {
      return Collection.find(id);
    },
    children: [{
      find(doc) {
        return Collection.find({
          _id: {
            $in: doc.ancestors
          }
        });
      },
    }],
  };
});

このパッケージは、パブリッシュがリアクティブであることを確認します。たとえば、クライアントにパブリッシュされたデータの値がancestors変更された場合、その変更を反映するように更新する必要があります。findOneリストを取得するためにパブリケーションで使用するだけの場合ancestors、クライアントに送信されるデータは、値がancestors変更されたときに更新されません。

于 2016-11-16T01:41:22.393 に答える