如果使用$ maxDistance,MongoDB $ nearSphere会变慢

时间:2018-11-09 12:53:32

标签: mongodb mongodb-java

我有一个包含大量坐标的MongoDB,用于查询距所提供坐标最近的位置,例如如果数据库包含坐标(2,2)和(3,3),并查询到最接近(1,1)的位置,它将返回(2,2)。

使用Java驱动程序,我可以通过以下方式执行查询:

MongoConnection.getInstance().getCollection(DB, COLLECTION).find(new BasicDBObject(LOCATION, new BasicDBObject("$nearSphere", Arrays.asList(longitude, latitude)))).limit(1)

可以正常工作,并且很快(即刻)返回结果。但是,如果最近的位置距离很远,此过程仍会返回它,同时我决定仅在半径R之内检索此结果。因此,我决定采用$ maxDistance:

BasicDBObject center = new BasicDBObject("$nearSphere", Arrays.asList(latitude, longitude));
center.put("$maxDistance", MAXDIST);
MongoConnection.getInstance().getCollection(DB, COLLECTION).find(new BasicDBObject(LOCATION, center)).limit(1)

这将返回预期结果,但是这大约需要5秒钟

我意识到我可以简单地通过使用前一种方法来解决此问题,并对返回的值执行简单的逻辑测试,但是我想理解为什么后一种方法比前一种方法要慢得多。我做错什么了吗?

感谢您的关注

0 个答案:

没有答案