0

次の形式の mongo ドキュメントがあります。

Group: {
    participants: [
        userId,
        userId,
        userId
    ]
}

...ここで、userIds は明らかに Meteor 独自のユーザー ドキュメントの ObjectIds です。

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

現在のパブリッシュの実装は次のようになります。

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

理想的には、公開を完了する前に操作するコードを実装して、各参加者のデータgroupsも公開したいと考えています。user.profile想像される最終的な形式は次のようになります。

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

私が気づいたことの 1 つは、自動公開と安全でないことがなければ、ヘルパー関数を介してクライアントでこれを行うことはできないということです。

4

1 に答える 1

1

これは、reywood:publish-compositeパッケージのかなり単純な使用例です。

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 }});
            }
        },
    ]
});

ユーザーのフィールドは常に含まれていることに注意してください。リスト_idで明示的に呼び出す必要はありません。fields:

于 2016-03-24T17:54:05.527 に答える