2011-04-27 61 views
0

基本上我有一个职位列表,我想知道如果我需要一个单独的收集链接到这些职位。 当然,我想显示在我的缩略名单(并在鼠标悬停的内容),但查询后的名称和内容将加载 所有评论太对了? (因为它们是嵌入的,评论数组预计会比帖子的内容大得多)这里数据重复是不可避免的?

有没有什么办法可以避免获得另一个集合,但同时避免每次我想要加载评论 知道一个职位的名称/描述?

> db.Posts.find() 
{ 
    "_id" : "123", 
    "Name": "test", 
    "Content": "wooops", 
    "comments" : [ {comment1}, {comment2}, {comment3} ] 
} 

当然,我知道我可以为注释创建另一个集合。但据我所知,在生产使用中是不可能的,因为我希望每天都有很多帖子,这意味着每个新帖子都会创建一个新的评论集。这是建议吗?据official docs说,最大收集数量是12000.尽管它说数量可以增加,但我强烈地认为这不是一个好主意。 编辑:我计算出它的绝对最大值是150万集合/ =职位。当然这还不够。

在这个问题上的任何经验,将不胜感激:)

+1

我真的不明白为什么你没有为所有名为“评论”的评论收集“1”集合。 (并在其中放置一个post_id,这样你就可以得到帖子的评论 – frail 2011-04-27 12:41:37

+0

@frail:你的意思是把所有帖子的所有评论放到同一个集合中?我的评论被构造成一棵树,(我这样做:[官方doc](http://www.mongodb.org/display/DOCS/Trees+in+MongoDB#TreesinMongoDB-MaterializedPaths%28FullPathinEachNode%29)我想(我是新来的数据库),查询树结构将是非常慢,因为它就像在一个巨大的水桶里钓鱼一样,并且每当我需要找到任何评论时,mongodb都会在我的db上存在任何其他评论的开销。 – Blub 2011-04-27 12:56:07

+0

如果您不喜欢@ frail的建议,也可以单独评论集合,但同一篇文章中的同一篇文章的所有评论(与现在相同的结构,只需将评论字段移动到不同的集合中,使用相同的文章_id)。 – Thilo 2011-04-27 13:06:31

回答

1

,但查询的postname和内容将加载太对所有的意见?

不一定。 MongoDB允许你加载部分文档(类似于SQL中的投影,你只需要选择一些字段)为此,你可以在find()查询中添加第二个参数,提供一个列出要返回的元素的文档:

> db.Posts.find({}, {Name:true, Content:true}) 
+0

你有链接到该功能的官方文档?这听起来很完美,但我无法在任何地方找到它。 – Blub 2011-04-27 13:01:51

+0

它在教程中。搜索“部分”。 http://www.mongodb.org/display/DOCS/Tutorial – Thilo 2011-04-27 13:03:08

+0

没错,但并没有说明它如何被加载到内存中。它可能仍然会加载整个事物,但只返回一个部分集合。请看这里例如:http://osdir.com/ml/mongodb-user/2010-03/msg01271.html – Blub 2011-04-27 13:05:49