1

以下の例のような地理クエリがいくつかあります。それらは 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"
}

ただし、これについて説明すると、このインデックスを使用しているようには見えません。最初に作成された point:2d インデックスのみである他のインデックスを使用しているだけです。

私がここで誤解していることはありますか?

4

1 に答える 1

1

ジオインデックスは1つしか持てません。これで、2つになり、パーツの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

于 2012-11-22T09:22:07.060 に答える