2013-05-02 95 views
1

我知道這已經在這裏覆蓋了很多,但是,我對MongoDB非常陌生,並且正在努力應用我發現的情況。Mongodb - 結合來自兩個集合的數據

總之,我有兩個集合'total_by_country_and_isrc',它是MapReduce函數的輸出和'asset_report',其中包含'total_by_country_and_isrc'集合中不存在的asset_id或來自MapReduced的原始原始數據集合。

在 'total_by_country_and_isrc' 中的數據的一個例子是:

{ 「_id」:{ 「custom_id」:4748532, 「ISRC」: 「GBCEJ0100080」, 「國家」: 「AE」} 「值」:0}

而在 'asset_report' 中的數據的一個例子是:

{ 「_id」:的ObjectId( 「51824ef016f3edbb14ef5eae」), 「資產標識」: 「一個836656134476364" , 「資產類型」: 「網絡」, 「元數據起源」: 「未知」, 「自定義ID」: 「4748532」, 「ISRC」: 「」,}

我想最終得到以下的( 'total_by_country_and_isrc_with_asset_id'):

{ 「_id」:{ 「資產標識」: 「A836656134476364」, 「custom_id」:4748532, 「ISRC」: 「GBCEJ0100080」, 「國」 :「AE」},「value」:0}

我知道我將如何處理關係數據庫,但是我我想嘗試在Mongo中工作,因爲我正在處理一些非常大的集合,並且覺得Mongo是正確的工具。

任何人都可以在這裏提供一些指導?

+0

不幸的是,你不能「加入」這樣的兩個集合。 MapReduce只運行一個集合(和單個文檔)。您可能需要存儲更加非規範化的數據才能運行MapReduce。 – WiredPrairie 2013-05-02 12:35:24

+0

是的,我意識到你不能以你在關係數據庫中的方式進行連接,但我已經看到一些似乎可以用MapReduce推斷出它的例子。感謝非規範化的提示,但我會研究。 – Raoot 2013-05-02 13:19:45

+0

你有鏈接到你可以提供的例子嗎?也許我錯過了你想要做的事情。你可能可以做兩個MapReduces並且將/ out合併到同一個集合中(這是一些嘗試)。像這樣:http://stackoverflow.com/questions/9696940/merging-two-collections-in-mongodb我不跟隨你的例子,足以說這是否可能工作。 – WiredPrairie 2013-05-02 14:05:34

回答

0

我想你想使用「減少」輸出動作:Output to a Collection with an Action。您需要重新生成total_by_country_and_isrc,因爲它看起來並不像asset_report具有生成您在total_by_country_and_isrc中已擁有的密鑰所需的字段 - 因此「連接」數據是不可能的。

首先,編寫一個能夠從原始集合(用於生成total_by_country_and_isrc)以及從asset_report集合生成相同鍵的映射方法。將這些鍵看作「連接」字段。

接下來,使用正確的鍵映射並減少原始集合以創建total_by_country_and_isrc。

最後,地圖asset_report與您用於生成total_by_country_and_isrc,但使用一個減少可用於減少交叉點(通過鍵)的這個映射從asset_report數據和在total_by_country_and_isrc數據功能的相同方法。