我有几个地理查询,看起来类似于下面的例子。它们不仅是Poly查询中的一个点,还有其他方面。
查询:
{
"point": {
"$within": {
"$polygon": [
[
41.878335,
-87.627319999999997
],
[
41.877602000000003,
-87.627319999999997
],
[
41.879672999999997,
-87.627031000000002
],
[
41.878723999999998,
-87.627204000000006
],
[
41.878507999999997,
-87.627262000000002
],
[
41.878335,
-87.627262000000002
]
]
}
},
"MYLISTING": {
"$in": [
"All"
]
},
"SUPPORT": {
"$in": [
"Y"
]
},
"TYPE": {
"$in": [
"Food"
]
}
}
为了更快地完成这些操作,我将每个其他项目添加到索引中:
{ "v" : 1,
"key" : {
"point" : "2d",
"MYLISTING" : 1,
"SUPPORT" : 1,
"TYPE" : 1
},
"ns" : "mydb.collection",
"name" : "point_2d_MYLISTING_1_SUPPORT_1_TYPE_1"
}
然而,当对此进行解释时,它似乎永远不会使用此索引,它只是使用我所拥有的另一个索引,它只是最初创建的2d索引。
我在这里有一些误解吗?
答案 0 :(得分:1)
您只能拥有一个地理索引 - 现在您有两个,其中一个部分是复合索引的一部分。文档中提到了限制:http://api.mongodb.org/wiki/current/Geospatial%20Indexing.html#GeospatialIndexing-CreatingtheIndex
解决方案是简单地删除您在空间字段上的索引:
db.yourCollection.dropIndex( { point: '2d' };
当您使用explain()运行查询时,您会看到现在再次使用哪个索引 - 在这种情况下,应该是复合索引。还要确保地理空间字段是复合索引的第一部分,如下所述:http://api.mongodb.org/wiki/current/Geospatial%20Indexing.html#GeospatialIndexing-CompoundIndexes