2012-11-21 68 views
1

我有幾個類似於下面的例子的地理查詢。它們不僅是Poly查詢中的一個要點,而且還有其他方面。MongoDB - Compond Geo多邊形索引

查詢:

{ 
"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

嘗試使用參數「true」運行解釋。這將爲所有查詢計劃生成統計信息,而不僅僅是最優的一個。它可以提供更多關於你的查詢使用它的索引的信息。 –

+0

你不能在一個集合上有多個'2d'索引(你有兩個簡單的'2d'和一個帶有附加字段的索引)。這在文檔頁面中提到。 –

回答

1

您只能有一個地理索引 - 現在您有兩個,其中一個部分是您的複合索引的一部分。 )

db.yourCollection.dropIndex({ point: '2d' }; 

然後,當您運行查詢,以解釋(,:的限制是在文檔中提到:http://api.mongodb.org/wiki/current/Geospatial%20Indexing.html#GeospatialIndexing-CreatingtheIndex

該解決方案將是簡單地丟棄您對剛剛在空間領域的指數你會看到現在使用哪個索引 - 在這種情況下,應該是複合索引。另請確保,地理空間字段是您的複合索引的第一部分,如下所述:http://api.mongodb.org/wiki/current/Geospatial%20Indexing.html#GeospatialIndexing-CompoundIndexes