我有一个~400k对象的数据集,格式为:
{
"trip": {
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-73.9615,
40.6823
],
[
-73.9704,
40.7849
]
]
},
"properties": {
......
}
}
}
我尝试在mLab上制作2dsphere
索引,如下所示:
{"trip.geometry" : "2dsphere"}
我假设只是打电话:
db.collection.createIndex( {"trip.geometry" : "2dsphere"} )
当我尝试执行$geoWithin
查询时(约500次点击):
db.collection.find(
{
"trip.geometry": {
$geoWithin: {
$geometry: {
type : "Polygon" ,
coordinates: [
[
[-74.0345,40.7267],
[-73.9824,40.7174],
[-73.9934,40.7105],
[-74.0345,40.7267]
]
]
}
}
}}
)
我注意到它很慢,约2秒钟。然后我尝试完全删除索引,时间增加非常轻微。 ~0.5秒。这个查询是否可能没有使用我设置的索引?我included the explain() here。
根据我的解释,获胜计划首先根据简单过滤器获取所有数据,然后使用2dindex
。鉴于2dindex
和lat
数据没有直接编入索引,我们不应该使用lon
开始吗?