Mongo DB – 子集合?

我真的是新来的MongoDb,并与nodeJS和本地节点mongodb驱动程序使用它。 我对执行有怀疑。 我希望你能帮助我:我有这个“架构”,其中db.pages拥有我的网站的每个部分的configuration:

db.pages = [ {name: 'contacts', settings:{...}}, {name: 'blog', settings:{...}, posts: "blogPosts"}, {name: 'media', settings: {...}, posts: "mediaPosts"} ] db.blogPosts = [ {title: 'post1', date: '2011-10-22', author:'me', content: '...'}, {title: 'post2', date: '2011-11-22', author:'me', content: '...'}, {...............................................................} ]; 

我在这里做的是,在每个页面中,我定义是否有一个post集合,并在节点中,当我加载页面,我检查page.posts是否定义,如果是,加载适当的集合。

也许我错了,但是这看起来太关系了,所以我的想法是将blogPosts的内容直接作为pages集合的道具posts的值,如下所示:

 db.pages = [ {name: 'contacts', settings:{...}}, { name: 'blog', settings:{...}, posts: [ {title: 'post1', date: '2011-10-22', author:'me', content: '...'}, {title: 'post2', date: '2011-11-22', author:'me', content: '...'}, {...............................................................} ] }, {name: 'media', settings: {...}, posts: [...]} ] 

我真的认为这在NoSQL环境中更有意义,但是我可能是错的。 我遇到的问题是,使用后者的configuration,我似乎无法使nodejs将posts字段视为mongo集合。

我希望这对你有意义,如果是的话,我需要知道的是:

  1. 认为第二种方法是正确的吗?
  2. 我怎样才能使用节点读取'sub-collection'作为集合,所以我可以应用一个游标,并使用find()sort()limit()skip()等等…

第一种方法更好。 第二种方法有许多缺点:

  1. 每个文档的大小限制为16MB。 您将达到此限制,并将无法添加更多博客文章
  2. 您无法从磁盘查询和获取各个博客文章,因为它们都是一个大文档
  3. 如果你应用这个原则,那么你会把所有的评论也放在同一个页面文件中,这会使它更加复杂,并且会失去很多的灵活性