私はゲームを作っています。選手はリーグを組んで競合する予測をする。リーグは次のようになります。各プレイヤーのためにMeteor/Mongodb - 配列、サブ文書、重複サブスクリプション
{ leagueName: "Premier League",
players:[
{name: "Goodie", secretPrediction: "abc"},
{name: "Baddie", secretPrediction: "def"}
] }
、私はクライアントにリーグ内のすべての選手の名前を公表する必要がありますが、だけで、自分の秘密の予測。グッディがログインしているのであれば、上から、ミニモンゴ上の文書は次のようになります - 全体のリーグの文書を取得するために、1以外のすべての秘密の予測、および1を除く
{ leagueName: "Premier League",
players:[
{name: "Goodie", secretPrediction: "abc"},
{name: "Baddie"}
] }
これを行うために、私は2つの出版物を持っています現在のプレーヤーのサブ文書をプレーヤーの配列に取得するには、彼女の秘密の予測が含まれています。私の出版物は、次のとおりです。
// Publish whole players array excluding secretPrediction
Leagues.find({"players.name": "Goodie"}, {fields: {"players.secretPrediction": 0}})
// Publish the whole Goodie item in the players array and nothing else
Leagues.find({"players.name": "Goodie"}, {fields: {players: {$elemMatch: {name: "Goodie"}}}})
問題は、私は両方上記公報に加入したときに、私は私がしたい文書を取得しないということです - 秘密の予測が偶数秒の出版物で除外されています。 (期待通りの出版物が振る舞う自分で、それは私が両方に加入したときのみです。)
今、私は2つの出版物がダウンし、クライアント
の「合併」する必要があることをthis answerから理解トップレベルのフィールドのレベルMeteorは、サブスクリプションが重複するように、ドキュメント間の組合を実行するように注意します。異なるトップレベルのフィールドをクライアントの作業に並べて発行する機能を公開し、クライアントでは、コレクションは2つのフィールドセットの和集合になります。
だから私は、主に2つの質問を持っている(とも/ここまでそれを作るためのおかげでやった!):私はトップレベルのフィールドを扱っていないよので
- は、文書の労働組合が起きていません?これを回避する方法はありますか?
- 私はこれについて完全に間違った方法ですか?私が望む結果を得る良い方法はありますか?
1.正しい。 2.クライアントのみの「仮想」コレクションに公開しようとする可能性があります。 – MasterAM