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集合。
我希望这对你有意义,如果是的话,我需要知道的是:
- 认为第二种方法是正确的吗?
- 我怎样才能使用节点读取'sub-collection'作为集合,所以我可以应用一个游标,并使用
find()
,sort()
,limit()
,skip()
等等…
第一种方法更好。 第二种方法有许多缺点:
- 每个文档的大小限制为16MB。 您将达到此限制,并将无法添加更多博客文章
- 您无法从磁盘查询和获取各个博客文章,因为它们都是一个大文档
- 如果你应用这个原则,那么你会把所有的评论也放在同一个页面文件中,这会使它更加复杂,并且会失去很多的灵活性