MongoDB聚合查询属性

时间:2014-12-12 12:18:49

标签: mongodb grouping average

我将以下文档结构存储在集合中:

{
    "name": "Empire State Building",
    "location": {
        "city": "New York",
        "lat": 54.665434,
        "lng": 3.34434
    }
}

该系列包含世界各地不同城市的各种地标的坐标。

我希望能够做的是根据集合中的记录获取所有城市的平均latlng

到目前为止,我没有太多运气,我可以使用以下查询提取不同的城市名称:

db.pubs.distinct("Location.City").sort()

但是我不知道从哪里开始获取所有匹配值的lat和lng属性的平均值。

如果它有所不同我使用的是mongo shell

2 个答案:

答案 0 :(得分:1)

$avg运营商是您的朋友。 $avg documentation

db.pubs.aggregate([
    {
        $group: {
                _id: "$location.city", 
                 avgLat: {$avg : "$location.lat"}, 
                 avgLng: {$avg : "$location.lng" }
    }}])

答案 1 :(得分:0)

我认为你应该尝试mongo聚合。以下聚合可能适用于您的情况

db.collectionName.aggregate({
"$match": {
    "location.city": "New York"
}
},
{
"$group": {
    "_id": 0,
    "LatAvg": {
        "$avg": "$location.lat"
    },
    "LongAvg": {
        "$avg": "$location.lng"
    }
}
})