mongodb,管道,多个$ group阶段

时间:2015-05-04 15:27:21

标签: python mongodb

我想简单地获得城市集合中所有国家的平均区域城市人口。我认为我的第一个小组阶段的工作是向我提供该地区平均人口的所有不同地区。 我的计划是现在进入下一阶段,按国家识别,然后建立我在第一小组阶段获得的所有价值的平均值。也许我在这里思考的错误或更可能是我的执行,因为我是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 个答案:

答案 0 :(得分:1)

为了获得城市集合中所有国家/地区的平均区域城市人口,您需要首先计算一个国家/地区中每个地区的平均城市人口数,然后计算一个国家/地区所有区域平均值的平均值。{第一个$ group管道阶段中的{1}}字段应该是复合键,即由多个字段组成的文档。在上述情况下, _id $group中的键将是_idisPartOf字段。您可以在这里获得每个国家/地区的平均人口数。然后,下一个群组管道阶段计算所有国家/地区人口平均值的平均值。因此,您的最终聚合管道应如下所示:

country