2016-05-01 49 views
0

使用MongoDB的,的NodeJS和流星,我有2個集合設置是這樣的:子查詢得到分類和數據

分類: *食品 *生活方式 *其他

項目:

1. CategoryId: 1 (food) 
* Pizza 

2. CategoryId: 1 (food) 
* Spaghetti 

3. CategoryId: 2 (lifestyle) 
* Ziplining 

4. CategoryId: 2 (lifestyle) 
* Fishing 

最終,我試圖在模板中生成如下結果:

Food: 
* Pizza 
* Spaghetti 

Lifestyle: 
* Ziplining 
* Fishing 

Other: 

我在想這樣做的最好方法是做一個查詢,拉出類別,提取類別id,然後用類別id做第二個查詢,遍歷結果並縫合所有一起放到一個單一的多維json對象中,我可以使用該模板進行分析。 現在出現了棘手的部分...我一直無法找到關於如何做到這一點的文檔,因爲mongo主要是爲非規格化數據設計的。

+0

您可以顯示一些例子文件? –

+0

如果你正在尋找代碼,我沒有這個。我現在感覺有點失落。 我的類別集合看起來像這樣:https://www.evernote.com/l/ASICpfUhw09PD5QRWsd_LHSzFl5C02judkg我還是很新的MongoDB,所以我沒有意識到_id不是一個簡單的整數。 –

回答

0

這其實很簡單的事:

let categoryId = Categories.findOne({<Your query here>}); 
let resultCursor = Items.find({CategoryId:categoryId}); 

在第一行中的查詢取決於你的文檔結構。

+0

不完全是我之後,但我不知道我能實際得到我所追求的。我只是拉起集合,ID不是簡單的整數,而是objectId的。看起來我必須以某種方式使用DBRef,但我不確定這是否值得付出努力。我的類別集合的屏幕截圖:https://www.evernote.com/l/ASICpfUhw09PD5QRWsd_LHSzFl5C02judkg –

+0

因此,我所追求的是對類別進行單個查詢,獲取所有類別,然後對項目Collection執行查詢並拉出所有與這些類別相關的項目。 –

+0

它仍然有效。只需在第一條語句中使用find()而不是findOne(),並在第一條語句的循環中執行第二條語句。 –

0

讓我們假設你的Items樣子{ _id, categoryId, name }和你Categories樣子{ _id, name }

然後你只是想跨兩個集合顯示的層次結構。

火焰(HTML):

<template name="hierarchy"> 
<ul> 
{{#each categories}} 
    <li>{{name}}</li> 
    <ul> 
    {{# each items _id }} <!-- here _id is the _id of a category --> 
    <li>{{name}}</li> 
    {{/each}} 
    </ul> 
{{/each}} 
</ul> 
</template> 

助手(JS):

Template.hierarchy.helpers({ 
    categories: function() { 
    return Categories.find({},{sort: {name: 1}}) 
    }, 
    items: function(_id){ 
    return Items.find({categoryId: _id},{sort: {name: 1}}) 
    } 
}); 
+0

是的!這正是我正在尋找的。我將不得不在稍後嘗試。謝謝! –