2011-01-28 155 views
1

我有一個問題,我不知道如何有效地解決。如何使用MongoDB有效地將數據從一個集合集合到另一個集合中?

我有兩個類別:

1)

hits = { 
    'day': '', 
    'number_of_hits': 0 
    'user_id': 0 
} 

2)

stats = { 
    'day': '', 
    'total_number_of_hits': 0 
    'user_id': 0 
    ... 
    some other stuff 
} 

我需要得到number_of_hits的資金用於每一天(可以有每天許多文件包含 不同數量的命中)並以儘可能快的方式用這些總數更新統計數據集合。 這必須完成每個user_id在匹配集合中找到

我可以例如得到聚集點擊集合,然後在例如。循環更新統計信息收集。

但有些事情告訴我,這不是一個好方法。

此外,有時候統計信息收集可能有些日子沒有文檔,所以他們需要創建 而不是更新。

如果你能得到我的任何想法,將是驚人的:)

謝謝 PabloX

回答

3

可能是試圖重新設計你的結構

stats{ 
    'day': '', 
    'user_id': 0, 
    'hits':{ 
     // Array of your hits document 
    } 
} 

,只得到一個包含所有匹配的文檔。你可以隨時計算總數。

+0

有趣的想法,謝謝:)我很擔心,單個文檔可以去上面4-8mb限制。但是我會想如果我能改變收集的方式,所以也許這個限制不會成爲問題。 – pablox 2011-01-28 17:00:07

0

你的問題似乎是Mongo的map/reduce功能的經典案例。有關更多詳細信息,請參閱http://www.mongodb.org/display/DOCS/MapReduce

有一點要注意,但是,與地圖/減少。在我使用的Mongo版本(1.4.5)中,執行map/reduce會獲取鎖定所有讀者和作者的數據庫鎖定。不確定這在Mongo的新版本中是否仍然存在問題。

0

另一個想法是使用$ inc操作符 的更新。基本上,如果文檔存在與user_id和date匹配的文件,則只需將匹配值增加1,否則插入一個。

這是最有效的方式,除非你真的需要記錄每一個命中。

我不知道這是如何與蟒蛇進行,但檢查出蒙戈的文檔:

http://www.mongodb.org/display/DOCS/Updating#Updating-%24inc

相關問題