【问题标题】:Mongo DB - sub-collections?Mongodb - 子集合?
【发布时间】:2012-03-26 21:35:01
【问题描述】:

我真的是 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的内容作为pages集合的propposts的值,像这样:

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. 如何使用节点将“子集合”作为集合读取,以便我可以应用游标并在其上使用find()sort()limit()skip() 等...

【问题讨论】:

    标签: node.js mongodb nosql


    【解决方案1】:

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

    1. 每个文档的大小限制为 16MB。您将达到该限制,并且无法添加更多博文
    2. 您不能在一个大文档中查询和获取磁盘中的单个博客文章
    3. 如果你应用这个原则,那么你会将所有 cmets 也放在同一个 pages 文档中,这会进一步复杂化并且会失去很多灵活性

    【讨论】:

    • 谢谢,我理解第 1 点和第 3 点。我不确定您的第 2 点是否是我第二个问题的答案。我仍然不知道,我是否可以将收藏的子收藏视为第一级。
    • 可以使用find(),但是sort()、limit()、skip()适用于文档。例如,在您的第二种方法中,您不能选择最新的 5 篇博文。您可以找到 5 个包含最新博客文章的页面,但必须获取这 5 个页面中的所有博客文章。
    • 好的,我几乎明白了。最后一个问题:无论如何,在运行时,我可以:选择一页,将帖子集合转入文档?
    • 我完全明白,在这种情况下,事情应该分开,我只是在想我可能会觉得这很有用的场景,谢谢
    • 没听懂你上一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2013-08-29
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多