2011-06-13 76 views
9

我在map/reduce在MongoDB中的工作方式中遇到了麻煩。我有一個字段的集合:areacode, state, county, zip, city, lat, lon,列出美國的每個郵政編碼以及相應的縣,州等。如何在MongoDB中使用Map/Reduce?

我希望能夠查詢所有縣或城市在給定狀態。所以基本上是查找所有記錄「State = MI」的查詢。在這種情況下,大約有900條記錄被返回。我怎麼把他們按縣分組,這樣我才能得到那個州的83個縣?我不想使用不同的字符,因爲我希望能夠按字母順序排列它們,並且可能拉出經緯度。

有關如何使用map/reduce來完成此操作的任何建議?我覺得這很基本,我無法弄清楚。

回答

44

我沒有在PHP的經驗,但如果你想了解如何MongoDB的地圖,減少工作,那麼你可以看看這個..

enter image description here

欲瞭解更多信息,請查看this

0

我初學者用MongoDB的MapReduce編程,但會嘗試看看是否有幫助,定義的Map Reduce函數,

您的地圖功能看起來像:

function() { 
    emit(this.county, {count: 1}); 
} 

你Reduce函數會是什麼樣子:

function(key, values) { 
    var result = {count: 0}; 
    //Skip aggregation step if not needed 
    values.forEach(function(value) {  
     result.count += value.count; 
    }); 
    return result; 
} 

而且隨着地圖轉達您的查詢條件降低,上述僞代碼應該給你的記錄#每縣&縣本身的名單。如果您只需要縣,您可以簡單地使用縮減功能跳過彙總,在這種情況下,您應該列出縣名單。

讓我知道是否有更好的方法來實現。

3

我如何將他們按縣分組,這樣我就可以得到該州的83個縣?

正如你所描述的那樣,這將需要一個distinct command

我不希望使用不同的,因爲我希望能夠對它們進行排序按字母順序排列

distinct命令將返回結果的數組。如果它們尚未排序,對它們進行排序應該是微不足道的。

...並可能拉出經緯度。

你想拉出什麼經緯度?根據你的模式,你對城市有一定的經驗,但是我沒有看到一個縣的緯度/經度。

有關如何使用map/reduce來實現這一點的任何建議?

此時,您必須使用distinct或類似的Map/Reduce操作。

但是,我不清楚這是否能夠提供您正在尋找的內容,因爲我不清楚您打算如何爲所在縣提取緯度/經度數據,因爲只有這些數據是城市數據。

如果您可以提供一些示例輸入和預期輸出,那麼我可能會提供更具體的答案。