Mongodb - 子集合?

时间:2012-03-09 12:21:06

标签: node.js mongodb nosql

我是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: '...'},
  {...............................................................}
];

我在这里做的是,在每个页面中,我定义我是否有帖子集合,并且在节点中,当我加载页面时,我检查是否定义了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: [...]}
    ]

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

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

  1. 我认为第二种方式是正确的方式是对还是错?
  2. 如何使用node将'sub-collection'作为集合读取,以便我可以应用游标并使用find()sort()limit()skip(),等等......就此而言......

1 个答案:

答案 0 :(得分:5)

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

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