mongodb $geoIntersects 或 $geoWithin 一个点匹配多个多边形 - 按面积排序?

mongodb $geoIntersects or $geoWithin a point matches multiple polygons - sort by area?

我有一个 mongo 查询来检查一个点是否在多边形内。

neighborhood =  db.collection.findOne({
    loc: {$geoInteresects: {$geometry: {
        type: 'Point',
        coordinates: [lng, lat]
    }}}
})

目前,我所有的多边形都只是一个层次,一个邻域,其中 none 个重叠。

我想开始在同一个集合中存储城市、县和国家数据。显然,我可以将 findOne 更改为查找和修改 代码适当,但特别是,我希望结果排序 匹配,所以结果是: [ "Downtown", "San Francisco", "California", "US", "North America"]

用它来构建一个漂亮的字符串对我来说是微不足道的。

我还没有设置多层多边形,所以我还没有测试。

我知道 $near 运算符 returns 最近指向一个对象,并且可以排序,但我的假设是,通过阅读文档,因为我的测试点在 polgyon 内,所以排序顺序将是不确定的,而且我也 运行 也有获得附近多边形的风险,然后我将不得不检查第二个地理相交以确保我们不在其中。

所以我用不同的方式解决了这个问题。计算地理对象的面积应该在填充索引时提前完成。

我编写了代码来计算每个多边形的面积和边界并插入到集合中,因此可以使用常规排序及其索引。

db.collection.find({
    loc: {$geoInteresects: {$geometry: {
    type: 'Point',
    coordinates: [lng, lat]
}}}).sort({'properties.area': 1})

将始终给出我们匹配的最小多边形。如果 Mongo 可以做到这一点,那就太好了,但由于它可能是一个计算量大的操作,即使使用梯形模型,它也应该在插入时完成一次,而不是在查找时每次都完成。