2011-03-14 23 views
1

如何在collectionA上的map/reduce的「地圖」部分內訪問collectionB中的數據?從地圖中的collectionB訪問數據/在collectionA上執行的縮小A

如果有幫助,我將短語存儲在collectionA中,我想要將每個短語分割成地圖中的單個單詞,然後從collectionB中獲取每個單詞的特定值。

在代碼中,我想到它會是這個樣子......

map = function() { 
    var key, value; 
    var results = db["collectionB"].find({something_related_to_collectionA}); 

    results.forEach(function(result) { 
     // Change the value 
    }); 

    emit(key, value); 
}; 
reduce = function(key, values) { 
    // Perform the reduce 
}; 
db["collectionA"].mapReduce(map, reduce, {out: "collectionC"}); 

回答

0

這應該很好地工作。

db可以從幾乎任何地方訪問,據我所知。我已經運行了一個(完全沒用的)測試,它的工作方式與我的預期非常相似。你有什麼問題?

1

所以,理論上這應該工作。但實際上,你不想這樣做。

這種類型的查找打開了一整罐蠕蟲。例如,這是如何與分片工作?試想一下,你的javascript是shard2,它試圖從shard1訪問數據,這是如何工作的? shard2甚至不知道shard1存在。

如果你看看你的代碼,你基本上試圖重新創建一個JOIN聲明。 MongoDB的可擴展性的前提之一是它避免了連接b/c連接不能水平擴展。

這可能意味着更多的非標準化或某種形式的預處理或其他系統更改。理想情況下,如果您需要對集合執行map-reduce,那麼您將設計該集合以包含執行此操作所需的所有數據。

相關問題