2013-06-26 38 views
0

在放射函數中給出鍵的值爲並且在正確地縮小它之後,按照預期給出集合中的列的總數。現在我的問題是我不明白這是如何工作的。用關鍵字作爲零發射在mongodb中縮小地圖

我有我的發出像這樣;

function(){emit(0,this.total);}

有人請向我解釋一下在這工作嗎?先謝謝你。

回答

2

MapReduce是一件棘手的事情。你需要改變你的想法來理解它。在你的具體情況中,你告訴mongo不關心分組選項。當你這樣發射時,你所有的this.total將被髮送到一個批次,標識符爲,並在縮小步驟中一起聚合。這也意味着,該案件是相同的:

function(){ emit(0, this.total); } 
function(){ emit(1, this.total); } 
function(){ emit('asdf', this.total); } 
function(){ emit(null, this.total); } 

它們會導致保存結果,甚至批次名稱是不同的。

+0

感謝您的回覆。我無法在mongo文檔中找到這一點。如果你知道,你能提供一個鏈接到實際的文檔嗎? –

+0

[doc](http://docs.mongodb.org/manual/core/map-reduce/)[示例](http://docs.mongodb.org/manual/tutorial/map-reduce-examples/)[文章1](http://blog.serverdensity.com/map-reduce-and-mongodb/)[article 2](http://kylebanker.com/blog/2009/12/mongodb-map-reduce-basics/ ) –

1

爲了配合一些內部其他的答案,當你發出你的單,唯一的關鍵從發射產生的文件看起來像:

{_id:0,value:[5,6,7,8,9]} 

與代表所有發出的組合陣列。

發出時按鍵排列,這意味着只有一個文檔的內容是該集合中的所有total字段。

因此,當減少出現時,您將所有這些數字加在一起,它將正確地總計集合中所有total字段的總和。

+0

感謝Sammaye的洞察力。有沒有一個我可以真正研究的文檔?我一直無法找到一個。 –

+1

@nagaheadhunter它顯示在這篇文章的減少部分http://kylebanker.com/blog/2009/12/mongodb-map-reduce-basics/一點,但我一直在發現,10gen已經拿出了很多來自許多帖子和文檔頁面的技術資料,所以這是我能找到的關於它如何工作的實際內部結構的最佳作品 – Sammaye

+0

沒關係。謝謝。但是到目前爲止,由於文檔中沒有提及,我們沒有使用它。 –