как использовать агрегат и передавать документы, чтобы я мог группировать по цветам для страны, штата, города и района - PullRequest
0 голосов
/ 14 октября 2018

Вот входные данные в Mongodb:

{
    "_id" : ObjectId("5bb17bbd5b87d9a705583bb7"),
    "neighborhood" : "Garrison",
    "city" : "Montgomery",
    "state" : "Alabama",
    "country" : "United States",
    "color" : "Blue"
},
{
    "_id" : ObjectId("5bb17bbd5b87d9a705583bdc"),
    "neighborhood" : "Harper",
    "city" : "Austin",
    "state" : "Texas",
    "country" : "United States",
    "color" : "Red"
}

Что я пытаюсь получить примерно так:

Result.json Структура

{ 
  neighb`enter code here`orhood: {
    redColor_percent: 45,
    blueColor_percent:35,
    greyColor_percent:10
},
 city:  {
    redColor_percent: 45,
    blueColor_percent:35,
    greyColor_percent:10
},
 state:{
    redColor_percent: 45,
    blueColor_percent:35,
    greyColor_percent:10
},
 country: {
    redColor_percent: 45,
    blueColor_percent:35,
    greyColor_percent:10
  }
}

Я могу получить счетчик цветов для каждого города, но как мне передать документы и подсчитать каждый цвет для штата?используя следующий запрос

db.getCollection('geolocations').aggregate([
 {
   $group: { 
    _id: { 
        country: "$country",
        state: "$state", 
        city: "$city",

    },
        blueTotalCount: {$sum: {$cond: {if : {$eq: ["$color", "Blue"]}, 
then: 1, else: 0} } },
        redTotalCount: {$sum: {$cond: {if : {$eq: ["$color", "Red"]}, 
then: 1, else: 0} } },
        grayTotalCount: {$sum: {$cond: {if : {$eq: ["$color", "Gray" ]}, 
then: 1, else: 0} } }  

}}

output:

{
"_id" : {
    "country" : "United States",
    "state" : "Colorado"
},
"cities" : [ 
    {
        "city" : "Denver",
        "blue" : 15.0,
        "red" : 9.0,
        "gray" : 4.0
    }, 
    {
        "city" : "Boulder",
        "blue" : 4.0,
        "red" : 3.0,
        "gray" : 2.0
    }, 
    {
        "city" : "Colorado Springs",
        "blue" : 0.0,
        "red" : 5.0,
        "gray" : 2.0
    }
]

}


так что теперь, как мне теперь $сумма каждого цвета для государства?Спасибо!

...