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

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

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

4

1 回答 1

0

我想出了一个组查询,它将给我几乎我想要的结构,但足以用于模板。

db.things.group({
    key:{category:true},
    initial:{articles:[]},
    reduce: function(doc, aggregator) {
        aggregator.articles.push(doc);
    }
})
于 2013-03-08T21:00:36.677 回答