我的集合中有如下对象,如下所示:
{
"_id" : ObjectId("527d33a8623f6efd1c997440"),
"location" : {
"geometry" : {
"type" : "Point",
"coordinates" : [
-78.4067,
37.26725
]
},
"type" : "Feature",
"properties" : {
"name" : "Something here"
}
},
"name" : "Name of Object"
}我有以下索引:
{
"location.geometry" : "2dsphere"
}我可以做到以下几点:
db.myCollection.find({'location.geometry':{'$near':{'$geometry':{'type':"Point", 'coordinates': [-78.406700,37.267250]}, '$maxDistance' : 1000 }}})但是,我可以而不是执行以下操作:
db.myCollection.find( { 'location.geometry': { '$geoWithin':
{ '$geometry' :
{ 'type' : "Polygon",
'coordinates' : [ [ -118.108006, 34.046072], [ -117.978230, 34.041521] , [ -117.987328,33.913645 ]] } }
} } )当它返回错误时:
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吗?不能用在这个索引上吗?
发布于 2014-06-05 15:17:51
您为$geowithin查询提供的多边形不正确。多边形需要有与GeoJSON定义相同的起点和终点。
正确的查询是:
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多边形。
发布于 2014-06-05 15:28:38
MongoDB文档中有一个关于$geoWithin查询的错误。而这些文件指出:
指定的最后一点总是隐式地连接到第一个点。你可以指定多少点,因此边,随你喜欢。
这是错误的。多边形需要关闭。关于这一点,在MongoDB Jira有一张公开的门票:
https://jira.mongodb.org/browse/DOCS-2029
所以你的第一点和最后一点必须相等--你不能依靠MongoDB隐式地画多边形的最后一条线。
https://stackoverflow.com/questions/24063847
复制相似问题