Mongo DB - 子集合?

And*_*dez 3 mongodb nosql node.js

我是MongoDb的新手,并且正在将它与nodeJS和本机节点mongodb驱动程序一起使用.我对实施有疑问.我希望你能帮助我:我有这个"架构",其中db.pages包含我网站每个部分的配置:

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: '...'},
  {...............................................................}
];
Run Code Online (Sandbox Code Playgroud)

我在这里做的是,在每个页面中,我定义我是否有帖子集合,并且在节点中,当我加载页面时,我检查是否page.posts已定义,如果是,则加载适当的集合.

也许我错了,但这种期待太多,因为关系的事情,所以,我的想法,将是把内容blogPosts直接作为道具价值posts的的pages集合,就像这样:

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: [...]}
    ]
Run Code Online (Sandbox Code Playgroud)

我认为这在NoSQL环境中更有意义,但我可能错了.我遇到的问题是使用后一种配置,我似乎无法使nodejs将该posts字段视为mongo集合.

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

  1. 我认为第二种方式是正确的方式我是对还是错?
  2. 如何使用节点读取"子集"的集合,使得我能够把光标和使用find(),sort(),limit(),skip(),等,就可以了...

Sam*_*ava 6

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

  1. 每个文档的大小限制为16MB.您将达到该限制,并且无法添加更多博客帖子
  2. 您不能在磁盘中查询和获取单个博客文章作为一个大文档
  3. 如果您应用此原则,那么您将把所有注释也放在同一页面文档中,使其更加复杂并且将失去很多灵活性