2013-03-06 37 views
0

讓我的頭繞着MongoDB文檔設計,並試圖找出如何做某事或如果我吠叫錯誤的樹。如何獲取不同的值列表,並且低於所有具有不同價值的文檔?

我正在創建一個迷你CMS。該網站將包含按類別分組的文檔或網址,即有一個名爲「商店」的組,其中包含指向另一網站上的項目的鏈接列表,並且存在一個名爲「藝術」的類別,該類別具有藝術作品列表,每一個都有一個幻燈片的標題,摘要和圖像。

所以,一個可能的方式做到這一點是有一個集合,它看起來像:

[{category: 'Products', 
    title: 'Thong', 
    href: 'http://www.thongs.com' 
},{ 
    category: 'Products', 
    title: 'Incredible Sulk', 
    href:'http://www.sulk.com' 
},{ 
    category: 'Art', 
    title: 'Cool art', 
    summary: 'This is a summary to display', 
    images: [...] 
}] 

但是,這裏的問題....當我建立的網頁這種結構ISN對我很有用處。主頁包含按其分類,列表...菜單分組的「東西」列表。爲了能夠輕鬆地做到這一點我需要的東西,看起來更像是:

[ 
{'Products':[ 
     {title:'thong', href:'http://www.thongs.com'}, 
     {title:'Incredible Sulk'} 
    ] 
}, 
{'Art':[ 
     {title:'Cool art',summary:'This is a summary to display',images:[...]} 
    ] 
} 
] 

所以,問題是,我可以以某種方式做MondoDB這種轉變?如果我不能,那麼在我的應用服務器層做到這一點是不好的(我會得到一個獨特類別的分組列表,然後循環查詢Mongo查找該類別的文檔)?我猜應用服務器層是不好的,畢竟如果我幸運的話,mongodb會把它全部存儲在內存中。如果這兩種都不好,那麼我是否做得很錯,我是否應該將這種結構放在首位?

我需要讓用戶很容易地創建類別,並考慮如果他們開始添加大量文檔會發生什麼,並且我要麼限制爲每個類別拉回多少文檔,要麼限制字段返回,以便當我查詢mongodb時,它不會返回一個相對較大的數據塊,這是很慢且浪費的,但是返回的是我需要創建所需頁面的最小值。

回答

0

我想到了一個組查詢,它將給我幾乎所需的結構,但足以用於模板。

db.things.group({ 
    key:{category:true}, 
    initial:{articles:[]}, 
    reduce: function(doc, aggregator) { 
     aggregator.articles.push(doc); 
    } 
}) 
相關問題