我是 MongoDb 的新手,我正在将它与 nodeJS 和 native Node 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: '...'},
{...............................................................}
];
我在这里做的是,在每个页面中,我定义我是否有一个帖子集合,并且在 Node 中,当我加载页面时,我检查是否定义了 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 环境中更有意义,但我可能错了。
我遇到的问题是,使用后一种配置,我似乎无法让 nodejs 将 posts
字段视为 mongo 集合。
我希望这对您有意义,如果是的话,我需要知道的是:
- 我认为第二种方法是正确的方法是对还是错?
- 我如何使用 Node 将“子集合”读取为集合,以便我可以应用游标并使用
find()
、sort()
、limit()
,skip()
等等,在上面...
最佳答案
第一种方法更好。第二种方法有多个缺点:
- 每个文档的大小限制为 16MB。您将达到该限制并且将无法添加更多博客文章
- 您不能从磁盘中查询和获取单个博客文章,因为它们都在一个大文档中
- 如果你应用这个原则,那么你将把所有的评论也放在同一个页面文档中,使它变得更加复杂并且会失去很多灵 active
关于node.js - Mongodb - 子集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9633979/