2015-06-07 5 views
1

У меня есть список стран:Сортировать материки по количеству стран

"country": [ 
     { 
      "countryCode": "AD", 
      "countryName": "Andorra", 
      "currencyCode": "EUR", 
      "population": "84000", 
      "capital": "Andorra la Vella", 
      "continentName": "Europe", 
      "continent": "EU", 
      "areaInSqKm": "468.0", 
      "languages": [ 
       "ca" 
      ] 
     }, 
     { 
      "countryCode": "AE", 
      "countryName": "United Arab Emirates", 
      "currencyCode": "AED", 
      "population": "4975593", 
      "capital": "Abu Dhabi", 
      "continentName": "Asia", 
      "continent": "AS", 
      "areaInSqKm": "82880.0", 
      "languages": [ 
       "ar-AE", 
       "fa", 
       "en", 
       "hi", 
       "ur" 
      ] 
     }, 
etc. 

Теперь я должен написать Map/Reduce функции в формате JSON, чтобы получить выход так:

Ключа: Afrika значение : xxx Ключ: Азия Значение: xxx И т.д.

Где «значение» представляет собой количество стран на каждом континенте.

Я уже пробовал эту функцию Map:

function(doc) { 
    var a 
    { 
     for (a in doc.country){ 
     emit(doc.country[a].continentName, 1) 
     }; 
    } 
} 
+3

На каком языке вы используете? Что вы пробовали? –

+1

@ MJM: Будьте осторожны при заказе json-объектов. В соответствии с документами и этим [вопросом] (http://stackoverflow.com/questions/3948206/json-order-mixed-up) они неупорядочены. – albert

+0

@ Александр Пучков: Я использую JSON. Я просто добавил свою текущую функцию. – MJM

ответ

0

Карта Функция:

function(doc) { 
    var country = doc.country; 
    var i; 
     for (i in country) { 
      emit (country[i].continentName, 1) 
     }; 
} 

И тогда вы должны уменьшить его с Уменьшить Функция:

function(keys, values) { 
    return sum(values);} 
+0

Спасибо, это сработало для меня. :) – MJM

0

Я рекомендую испускайте значение null вместо 1 и используйте встроенную функцию уменьшения _count.

Смежные вопросы