【问题标题】:Query mongodb to search count occurrence of lats and lngs in collection查询 mongodb 以搜索集合中 lats 和 lngs 的出现次数
【发布时间】:2017-05-15 13:46:40
【问题描述】:

我有以下详细信息的文件..

{ 
        "_id" : ObjectId("58fa2847a105621bf28c7436"), 
        "srcLoc" : [ 29.03596937656403, 41.08048413380768 ], 
        "destLoc" : [ 29.3168603, 40.905371 ], 
        "wayPoints" : [ 
            { "_id" : ObjectId("58fa2961de50171c2e89e4e2"),
             "lng" : 29.035865853970662,
              "lat" : 41.08010057266194 
            },
            { "_id" : ObjectId("58fa2961de50171c2e89e4e1"), 
             "lng" : 29.053879848358697, 
             "lat" : 41.082083123947546 
            },
            { "_id" : ObjectId("58fa2961de50171c2e89e4e0"), 
             "lng" : 29.0638848389565, 
             "lat" : 41.0857235683904 
            },
            { "_id" : ObjectId("58fa2961de50171c2e89e4df"), 
             "lng" : 29.03194416492813, 
             "lat" : 41.0566495985393 
            } 
        ],
        "totalDistance" : 0.004627394567308733,
        "driverId" : ObjectId("58ecd6a563b5128b2b5e298b"),
        "riderId" : ObjectId("58ececcbb5e88b94e59e0cd1"),
        "__v" : 0 
        }

这里的字段“wayPoints”有中间点 lats-lngs 对。而且我必须在整个集合中找到最常出现在 wayPoints 字段中的 lat-lng 对……例如。我假设来自 wayPoints 字段的 lat-lng 对 [“液化天然气”:29.035865853970662, “纬度”:41.08010057266194] 我需要计算这个 lat-lng 对在所有 wayPoints 字段中的出现属于该集合。

【问题讨论】:

  • 您能否通过一个示例来说明您的集合中的文档是什么样的以及您的输入数据和预期结果是什么的清晰示例来完善这个问题?
  • 我有以下详细信息的文件..

标签: mongodb


【解决方案1】:

试试这个聚合框架查询:

db.stackoverflow.aggregate(
[
    {$unwind: "$wayPoints"},
    {$group: 
        {
        _id: {lng:"$wayPoints.lng", lat:"$wayPoints.lat"},
        count: {$sum:1}
        }
    },
    {$sort: {count:-1}}
]
)

我创建了一些与您提供的文档类似的文档,然后对集合运行此查询,结果如下。您可以看到,对于每个 lat-lng 对,都有一个出现次数的计数器,并且它们从最流行的对(出现 3 次)开始排序。

{ 
    "_id" : {
        "lng" : 29.035865853970662, 
        "lat" : 41.08010057266194
    }, 
    "count" : NumberInt(3)
}
{ 
    "_id" : {
        "lng" : 29.0638848389565, 
        "lat" : 41.0857235683904
    }, 
    "count" : NumberInt(2)
}
{ 
    "_id" : {
        "lng" : 29.053879848358697, 
        "lat" : 41.08208312394755
    }, 
    "count" : NumberInt(2)
}
{ 
    "_id" : {
        "lng" : 29.03194416492813, 
        "lat" : 41.0566495985393
    }, 
    "count" : NumberInt(2)
}
{ 
    "_id" : {
        "lng" : 49.0638848389565, 
        "lat" : 61.0857235683904
    }, 
    "count" : NumberInt(1)
}
{ 
    "_id" : {
        "lng" : 39.0538798483587, 
        "lat" : 51.08208312394755
    }, 
    "count" : NumberInt(1)
}
{ 
    "_id" : {
        "lng" : 59.03194416492813, 
        "lat" : 71.0566495985393
    }, 
    "count" : NumberInt(1)
}

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 2022-01-04
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2016-03-13
    • 1970-01-01
    相关资源
    最近更新 更多