2016-03-24 14 views
0

を公開します。リンクユーザーは、私は次の形式でのmongo文書を持って

私は本当に持ってる問題は、私は、ユーザーが自分のグループ内の他のユーザーの情報を表示したいということです。この実装では、私は安全な(読んだ:私はautopublishと安全でない削除された)グループメッセージングシステムを想像しています。

私の現在の公開実装は次のようになります。今

//grab all groups user belongs to 
Meteor.publish("groups", function() { 
    var groups = Groups.find({ 
     participants: { 
      $in: [ this.userId ] 
     } 
    }); 
    return groups; 
}); 

、理想的には、私はちょうど私がそれはまた、同様に各参加者のuser.profileデータを公開する公開を終了する前にgroupsを操作するためのいくつかのコードを実装するのが大好きです。次のように想像し、最終的なフォーマットは次のようになります。私は気づいた

Group: { 
    participants: { 
     userId 
    }, 
    users: { 
     { //One of these for each user 
      userId, 
      firstName, 
      lastName, 
      otherData 
     } 
    } 
} 

ことの一つは、autopublishと不安定なずに、私はちょうどヘルパー関数を介して、クライアント上でこれを行うことができないということです。

答えて

1

これはreywood:publish-compositeパッケージのためのかなり簡単な使用例です:ユーザの_idフィールドが常に含まれ

Meteor.publishComposite('groups', { 
    find: function() { 
     return Groups.find({ participants: { $in: this.userId }}); 
    }, 
    children: [ 
     { 
      find: function(group) { 
       return Meteor.users.find(
        { _id: { $in: group.participants }, 
        { fields: { firstName: 1, lastName: 1, otherData: 1 }}); 
      } 
     }, 
    ] 
}); 

。なお、明示的fields:リストでそれを呼び出す必要はありません。

+0

ここから、どのようにその子データにアクセスできますか?私は、Chromeのコンソールにコレクションをロギングしていると私は、これは。 – Henry

+0

ようになるだろうと任意の新しい配列、コードが構築さを見ていないんだけど、私はクライアントに送信された新しいデータが表示されません。 – Henry

+0

クライアントでは、 'Meteor.users'コレクションに追加の文書が表示されますが、要求したフィールドだけが表示されます。別の配列はありません。 –

関連する問題