2017-05-08 49 views
1

我正在構建React-Meteor網絡應用程序,我需要訪問某個集合中的特定數據。流星反應訂閱特定的採集數據

有三個主要組件,公司列表,項目列表和任務列表。列出所有公司時,我可以選擇一個,然後顯示與該公司相關的所有項目。然後,我想要做的是點擊一個項目並查看與該項目相關的所有任務。我的數據結構如下(你可以看到,項目對象的數組):

{ 
    "_id" : "aQnrkqMi6ugEvav4a", 
    "owner" : "7Gp49ZCtGC9oEx3jN", 
    "createdAt" : ISODate("2017-05-08T15:52:27.777Z"), 
    "data" : { 
     "name" : "lkhgb", 
     "contacts" : [ 
      { 
      ... 
      } 
     ], 
     "projects" : [ 
      { 
       ... 
      }, 
      { 
       "name" : "ljhvljhvblhkjvblhkj", 
       "id" : "258757206", 
       "tasks" : [ 
        "task1", 
        "task2" 
       ] 
      } 
     ] 
    } 
} 

在我的任務列表組件,我出口它像這樣:

export default createContainer((props) => { 
    const {companyId} = props.match.params; 
    Meteor.subscribe('company'); 
    return {project: Company.findOne(companyId)}; 
}, TaskList) 

我在哪裏」把公司撤下道具。我也從props中取消了projectId,但是當我查詢集合時,它只是返回undefined。我已經發布了GitHub repo在這裏住 - https://github.com/GlueDigiStu/ClientManager,並希望得到任何幫助。

回答

0

您確實訂閱了服務器上的「公司」發佈。 雖然該出版物不存在。

Meteor.publish('company', function (companyId) { 
    const publications = []; 
    publications.push(Company.find(
    { 
     _id: companyId, 
    }, 
)); 
    return publications; 
}); 

這將從服務器發佈你想要的ID。 然後從客戶的預訂將是:

Meteor.subscribe('company', props.companyId); 

讓我知道,如果您有任何進一步的問題。

如果我可以,我也會給你一些建議。將文件放入文件中對於出版物並不是很好。 我會建議將項目和任務放入新的集合中,並且只有在他們的項目被選中後才訂閱任務。

+0

嗨米奇,感謝你 - 我試過你的初始方法,我似乎無法得到它的工作。至於你的建議,我想我會沿着這條路走下去,並試圖將我的一個大集合分成三個獨立的集合。儘管如此,我還是無法擺脫「轉換」的文檔。你對這個話題有什麼建議嗎?我找到了這一個教程,但它是爲鐵路路由器,而不是反應(但我想它是相似的)http://meteor.hromnik.com/blog/joins-in-meteorjs-and-mongodb – GlueDigiStu

+0

我不會能夠幫助您完成轉換和被動連接。我們從來沒有在我們的項目中使用它們,因爲如果訂閱的集合沒有仔細管理,並且只是吐出所有屬性,就會導致巨大的性能下降。只要小心你使用變換髮布的內容。 – mitchken