【发布时间】:2011-12-06 07:37:28
【问题描述】:
我正在使用 $polygon 搜索进行地理空间查询。我的查询是:
{
'location_latLong': {
'$within': {
'$polygon': {
point1: {
lon: '-74.2621',
lat: '40.5788'
},
point2: {
lon: '-74.2621',
lat: '40.8494'
},
point3: {
lon: '-73.7499',
lat: '40.8494'
},
point4: {
lon: '-73.7499',
lat: '40.5788'
}
}
}
}
}
在我的收藏中,我有一个明显位于多边形内的文档:
{
"_id": ObjectId("4e95c285cb8a0efc2b00001a"),
"addedOn": Date(1318437509839),
"checkinDate": Date(1318392000000),
"checkinTime": Date(1318437476000),
"location_city": "New York",
"location_country": "United States",
"location_latLong": {
"xLon": -74.007124,
"yLat": 40.71455
},
"location_source": "personprofile",
"location_state": "New York",
"location_zip": ""
}
我在location_latLong 上有一个2d 索引。我知道 MongoDB 会忽略键名(据说),所以这无关紧要。那么为什么这会返回 0 个结果呢?
编辑
我刚刚按照 cmets 中的建议运行了 explain,我得到了:
{
"cursor" : "GeoBrowse-polygon",
"nscanned" : 0,
"nscannedObjects" : 0,
"n" : 0,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"location_latLong" : [
[
[
0,
0
],
[
0.000021457672119140625,
0.000021457672119140625
]
],
[
[
-0.000021457672119140625,
-0.000021457672119140625
],
[
0,
0
]
],
[
[
-0.000021457672119140625,
0
],
[
0,
0.000021457672119140625
]
],
[
[
0,
-0.000021457672119140625
],
[
0.000021457672119140625,
0
]
]
]
},
"keysChecked" : NumberLong(8),
"lookedAt" : NumberLong(4),
"matchesPerfd" : NumberLong(0),
"objectsLoaded" : NumberLong(0),
"pointsLoaded" : NumberLong(0)
}
【问题讨论】:
-
这个查询看起来不错,我不知道确切的问题.. 你收到错误消息了吗?您是否在索引中指定了最小/最大界限..
-
我没有在索引中指定最小/最大边界,因为它应该是 -180.. 180 默认情况下,不是吗?
-
你能从等式中删除猫鼬并使用
.explain()从shell 运行它吗?它可能会澄清正在发生的事情 -
@GatesVP 我按照你的建议添加了
explain
标签: mongodb geospatial mongoose