2011-04-27 38 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