当提示索引时,为什么MongoDB $ geoWithin会变慢?

时间:2013-06-02 02:17:56

标签: mongodb mongodb-query

我一直在努力解决这个问题。我收集了超过100,000份文件。每个文档都有一个geoLocation字段,它使用GeoJSON格式。我在geoLocation字段中添加了一个2dsphere索引。

如果我运行这个简单的查询,则需要将近1秒才能完成:

db.guestBookPost.find({"geoLocation" : { "$geoWithin" : {$centerSphere:[[-118.3688331113197 , 34.1620417429723], .00068621014493]}}, $hint:"geoLocation_2dsphere"}).limit(10)

解释显示:

{
    "cursor" : "S2Cursor",
    "isMultiKey" : true,
    "n" : 0,
    "nscannedObjects" : 0,
    "nscanned" : 100211,
    "nscannedObjectsAllPlans" : 0,
    "nscannedAllPlans" : 100211,
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "millis" : 910,
    "indexBounds" : {

    },
    "nscanned" : 100211,
    "matchTested" : NumberLong(100211),
    "geoTested" : NumberLong(0),
    "cellsInCover" : NumberLong(8),
    "server" : "ip-10-245-26-151:27017"
}

$ geoWithin查询看起来不像是使用了提示索引。光标类型是S2Cursor,看起来不正确。我做错了吗?这是MongoDB 2.4.3

谢谢, 莱斯