如何获得不同的值列表,以及所有具有该不同值的文档?

时间:2013-03-06 23:26:09

标签: mongodb

了解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: [...]
}]

但是,这就是问题....当我构建网页时,这个结构对我来说没什么用处。主页包含按其类别分组的“事物”列表,列出...菜单......这样的东西。为了能够轻松做到这一点,我需要有一些看起来更像的东西:

[
 {'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时,它不会返回相当大的数据块,这些数据很慢且浪费,而是返回我创建所需页面所需的最小数据。

1 个答案:

答案 0 :(得分:0)

我认为一个群组查询会给我几乎所需的结构,但足以用于模板。

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