2015-05-04 2 views
-2

Я хочу просто получить среднее региональное население города для всех стран в коллекции городов. Я думаю, что мой первый групповой этап работает с тем, чтобы дать мне все разные регионы со средним населением этого региона. Мой план состоял в том, чтобы перейти к следующему этапу сейчас, указать его по стране, а затем построить avg всех тех ценностей, которые я получил на своем первом групповом этапе. Возможно, у меня есть ошибка в моем мышлении здесь или, скорее, мое исполнение, так как я новичок в mongo db и конвейерной вещи. Ниже моего кода я помещаю данные примера.

pipeline = [ 
{ '$unwind' : '$isPartOf'}, 
{ 
    "$group": 
    { 
     "_id": "$isPartOf", 
     "avgpop" : {"$avg":"$population"},   
    } 
}, 
{ 
    "$group": 
    { 
     "_id": "$country", 
     "avgpopc" : {"$avg":"$avgpop"},  
    } 
} 

]

{ 
    "_id" : ObjectId("52fe1d364b5ab856eea75ebc"), 
    "elevation" : 1855, 
    "name" : "Kud", 
    "country" : "India", 
    "lon" : 75.28, 
    "lat" : 33.08, 
    "isPartOf" : [ 
     "Jammu and Kashmir", 
     "Udhampur district" 
    ], 
    "timeZone" : [ 
     "Indian Standard Time" 
    ], 
    "population" : 1140 
} 

ответ

1

Для того, чтобы получить среднеобластное население города для всех стран в коллекции городов, которые необходимо сначала вычислить среднее население города для каждого региона в стране, а затем вычислить среднее из всех региональных средних значений для страны. Поле _id на первой стадии трубопровода группы $ group должно быть составными ключами, то есть документами, состоящими из нескольких полей. В случае, указанном выше, в $group_id будет isPartOf и country. Здесь вы получаете среднее население каждого региона в каждой стране. Затем на следующей стадии группового трубопровода рассчитывается среднее значение всех средних региональных показателей страны. Таким образом, ваш конечный агрегатный трубопровод должен выглядеть следующим образом:

pipeline = [ 
     { "$unwind": "$isPartOf"}, 
     { 
      "$group": { 
       "_id": { 
        "Region": "$isPartOf", 
        "Country": "$country"  
       }, 
       "avgPopulation": {"$avg": "$population"},   
      } 
     }, 
     { 
      "$group": { 
       "_id": "$_id.Country" , 
       "avgRegionalPopulation": {"$avg": "$avgPopulation" },   
      } 
     } 
    ] 
Смежные вопросы