2016-03-24 58 views
0

我有一個蒙戈文件格式如下:鏈接用戶可以通過ID流星發佈

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

...其中的userIds明顯流星自己的用戶文檔的ObjectID。

我真的有這個問題,我希望用戶在他們的組中查看其他用戶信息。在這個實現中,我想象一個安全的(閱讀:我刪除了自動發佈和不安全的)組郵件系統。

我目前的發佈實施是這樣的:

//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

這是一個相當簡單的用例的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:列表。

+0

從這裏我如何訪問該子數據?我正在將這個集合記錄到Chrome的控制檯,我沒有看到任何這樣的新陣列。 – Henry

+0

像,代碼正在構建,但我沒有看到任何新的數據發送到客戶端。 – Henry

+0

在客戶端上,您將看到Meteor.users集合中的其他文檔,但僅包含您請求的字段。沒有單獨的陣列。 –