私は、実際のデータで動的に更新されるカードが多数 (10,000 以上) あるカード ゲーム プラットフォームに取り組んでいます。カードは 1 日 1 回入力/更新されます。
財団には2つの基本的なコレクションがあります(ユーザーは別として):
1) データ - 同じデータ フィールド/パラメーターに対して異なるデータ値を持つすべての個々のアイテム (たとえば、仕様を持つさまざまな自動車モデル)。このコレクションは、別の目的で別のサーバーにある json API から 1 日 1 回更新します。
2) カード - 一意の ID を持つ「印刷された」カードですが、複製はもちろん可能です (つまり、10 枚のフォード フォーカス 2010. カードを持つことができます)。カード コレクションには、効率的なユーザー カード ブラウジングを提供するためのデータ コレクション (モデル、ブランド、カードの最高のパフォーマンス パラメータ) からのいくつかの最も重要なフィールドと、詳細な情報を得るためにデータ コレクションにリンクする「dataId」フィールドがあります。コレクション「カード」のカードは、サーバー側の関数/メソッドを使用して挿入 (「発行」または「印刷」) する必要がありますが、クライアント側のイベント (新しいゲームなど) に応答します。新しいカードが挿入/発送されると、最初に users テーブルから user _id を持つ一意の「admin-owner」が取得され、1 対 1 の関係が確立されます。これは後で更新されて所有権が作成されます。
したがって、クライアント側では、カード コレクションはユーザーの「デッキ」(所有者がユーザーであるすべてのカード) のようなものです。私が正しければ、サーバー側で次のように記述する必要があります。
Meteor.publish('cards', function() {
return Cards.find({"userID":this.userId});
});
これはすべて非常に明確であり、その時点までは Meteor が素晴らしいので、数か月の作業を節約できます!
しかし、私はよくわかりません:
1) クライアントの詳細なカード ビューをカバーするクライアント側のデータ コレクション パブリケーションが必要です (カードとデータをリンクすることにより)。もちろん、クライアント カード コレクション (「デッキ」) の各カードの詳細を含む、データ コレクションからのすべてのデータ項目のみが含まれている必要があります。私はそれを次のように見ています:
Meteor.publish('data', function (dataIds *array with all unique data item ids in client card collection *) {
return Data.find("dataID":{$in:dataIds);
});
2) "admin" ユーザーのクライアント コンソールから Meteor.call メソッドを実行して、空/admin ユーザーでデータ項目 ("10 ニュース Ford Focus 2010 カードの作成") から新しいカードを追加/挿入するためのサーバー/クライアント メソッドが必要です。 、ランダム カードの所有権をクライアント カード コレクションの一部になるように変更するサーバー/クライアント メソッド (「ランダム カードをユーザーにキャスト」)。これらのメソッドをどこに配置しますか? クライアント コンソールからサーバー メソッドにアクセスするにはどうすればよいですか (特定の管理者ユーザーがログに記録されている場合)。
4) クライアント カード コレクションからのカードで使用されるデータのみを持つ、データ コレクションのサーバー公開/クライアント サブスクリプションを処理する賢い方法が必要です。クライアント側の minimongo クエリを使用して、ローカル カード コレクションをカバーするために必要なすべての dataIds を含む配列を作成する必要がありますか? 私はmongoが初めてなので、それを取得するためにSELECT DISTINCTやGROUP BYなどをどのように記述すればよいかわかりません。また、それがそれを処理するための最良の方法であるかどうかわからない、またはサーバー側でパブリケーションとして何かを行う必要がありますか?
1 ~ 4 について明確なアイデアがあれば、私は動き出すでしょう。