簡體   English   中英

MongoDB-組合地理多邊形索引

[英]MongoDB - Compond Geo Polygon Indexing

我有幾個地理查詢,看起來與下面的示例相似。 它們不僅是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索引。

我在這里有誤會嗎?

您只能擁有一個地理索引-現在有兩個地理索引,其中一部分是復合索引的一部分。 該文檔中提到了該限制: 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM