首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB无法解析查询(2dsphere):$geoWithin:

MongoDB无法解析查询(2dsphere):$geoWithin:
EN

Stack Overflow用户
提问于 2014-06-05 15:10:03
回答 2查看 1.7K关注 0票数 1

我的集合中有如下对象,如下所示:

代码语言:javascript
复制
{
    "_id" : ObjectId("527d33a8623f6efd1c997440"),
    "location" : {
        "geometry" : {
            "type" : "Point",
            "coordinates" : [ 
                -78.4067, 
                37.26725
            ]
        },
        "type" : "Feature",
        "properties" : {
            "name" : "Something here"
        }
    },
    "name" : "Name of Object"
}

我有以下索引:

代码语言:javascript
复制
{
    "location.geometry" : "2dsphere"
}

我可以做到以下几点:

代码语言:javascript
复制
 db.myCollection.find({'location.geometry':{'$near':{'$geometry':{'type':"Point", 'coordinates': [-78.406700,37.267250]}, '$maxDistance' : 1000 }}})

但是,我可以而不是执行以下操作:

代码语言:javascript
复制
db.myCollection.find( { 'location.geometry': { '$geoWithin': 
                                            { '$geometry' :
                                                { 'type' : "Polygon", 
                                                  'coordinates' :  [ [ -118.108006, 34.046072], [ -117.978230, 34.041521] , [ -117.987328,33.913645 ]]  } }
                                         } } )

当它返回错误时:

代码语言:javascript
复制
error: {
    "$err" : "can't parse query (2dsphere): { $geoWithin: { $geometry: { type: \"Polygon\", coordinates: [ [ -118.108006, 34.046072 ], [ -117.97823, 34.041521 ], [ -117.987328, 33.913645 ] ] } } }",
    "code" : 16535
}

我用错了geoWithin吗?不能用在这个索引上吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-05 15:17:51

您为$geowithin查询提供的多边形不正确。多边形需要有与GeoJSON定义相同的起点和终点。

正确的查询是:

代码语言:javascript
复制
db.myCollection.find( { 'location.geometry': 
                           { '$geoWithin': 
                                    { '$geometry' :
                                          { 'type' : "Polygon", 
                                             'coordinates' :  [ 
                                                   [ -118.108006, 34.046072], 
                                                   [ -117.978230, 34.041521], 
                                                   [ -117.987328,33.913645 ],
                                                   [ -118.108006, 34.046072]
                                                ]  
                                          } 
                                     }
                             }
                       }
                     );

注意更新的坐标数组。

显然,这里在MongoDB文档中提到的关于多边形的隐式连接的内容是而不是不正确的。它说,当使用$polygon在MongoDB中定义多边形时,只有这样连接才是隐式的。它没有提到智能和在提供给查询的GeoJSON多边形中进行隐式连接。

实际上,如果对于某些GeoJSON变量,您说它的类型是多边形,而不是将它的开始与结束连接起来,那么首先您还没有创建正确的GeoJSON多边形。

票数 2
EN

Stack Overflow用户

发布于 2014-06-05 15:28:38

MongoDB文档中有一个关于$geoWithin查询的错误。而这些文件指出:

指定的最后一点总是隐式地连接到第一个点。你可以指定多少点,因此边,随你喜欢。

这是错误的。多边形需要关闭。关于这一点,在MongoDB Jira有一张公开的门票:

https://jira.mongodb.org/browse/DOCS-2029

所以你的第一点和最后一点必须相等--你不能依靠MongoDB隐式地画多边形的最后一条线。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24063847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档