2013-03-06 59 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); 
    } 
}) 
相关问题