MongoDB $nearSphere gets slower if $maxDistance is used
up vote
0
down vote
favorite
I have a MongoDB containing a large amount of coordinates, which I use to query for the nearest position to a provided one, e.g. if the DB contains coordinates (2,2) and (3,3) and gets queried for the nearest position to (1,1) it would return (2,2).
Using the java driver, I can perform the query the following way:
MongoConnection.getInstance().getCollection(DB, COLLECTION).find(new BasicDBObject(LOCATION, new BasicDBObject("$nearSphere", Arrays.asList(longitude, latitude)))).limit(1)
which works fine and returns the result quite fast (instantaneously). However, if the nearest position is very far way, this procedure still returns it and meanwhile I decided to retrieve such result only if it is within a radius R. Therefore I decided to employ $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)
Which returns the expected result, however it takes about 5 seconds to do so.
I realize that I can circumvent this issue simply by using the former method and perform a simple logical test on the value returned, however I would like to understand why the latter procedure is so much slower than the former. Am I doing anything wrong?
Thank you for your attention
mongodb mongodb-java
add a comment |
up vote
0
down vote
favorite
I have a MongoDB containing a large amount of coordinates, which I use to query for the nearest position to a provided one, e.g. if the DB contains coordinates (2,2) and (3,3) and gets queried for the nearest position to (1,1) it would return (2,2).
Using the java driver, I can perform the query the following way:
MongoConnection.getInstance().getCollection(DB, COLLECTION).find(new BasicDBObject(LOCATION, new BasicDBObject("$nearSphere", Arrays.asList(longitude, latitude)))).limit(1)
which works fine and returns the result quite fast (instantaneously). However, if the nearest position is very far way, this procedure still returns it and meanwhile I decided to retrieve such result only if it is within a radius R. Therefore I decided to employ $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)
Which returns the expected result, however it takes about 5 seconds to do so.
I realize that I can circumvent this issue simply by using the former method and perform a simple logical test on the value returned, however I would like to understand why the latter procedure is so much slower than the former. Am I doing anything wrong?
Thank you for your attention
mongodb mongodb-java
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have a MongoDB containing a large amount of coordinates, which I use to query for the nearest position to a provided one, e.g. if the DB contains coordinates (2,2) and (3,3) and gets queried for the nearest position to (1,1) it would return (2,2).
Using the java driver, I can perform the query the following way:
MongoConnection.getInstance().getCollection(DB, COLLECTION).find(new BasicDBObject(LOCATION, new BasicDBObject("$nearSphere", Arrays.asList(longitude, latitude)))).limit(1)
which works fine and returns the result quite fast (instantaneously). However, if the nearest position is very far way, this procedure still returns it and meanwhile I decided to retrieve such result only if it is within a radius R. Therefore I decided to employ $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)
Which returns the expected result, however it takes about 5 seconds to do so.
I realize that I can circumvent this issue simply by using the former method and perform a simple logical test on the value returned, however I would like to understand why the latter procedure is so much slower than the former. Am I doing anything wrong?
Thank you for your attention
mongodb mongodb-java
I have a MongoDB containing a large amount of coordinates, which I use to query for the nearest position to a provided one, e.g. if the DB contains coordinates (2,2) and (3,3) and gets queried for the nearest position to (1,1) it would return (2,2).
Using the java driver, I can perform the query the following way:
MongoConnection.getInstance().getCollection(DB, COLLECTION).find(new BasicDBObject(LOCATION, new BasicDBObject("$nearSphere", Arrays.asList(longitude, latitude)))).limit(1)
which works fine and returns the result quite fast (instantaneously). However, if the nearest position is very far way, this procedure still returns it and meanwhile I decided to retrieve such result only if it is within a radius R. Therefore I decided to employ $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)
Which returns the expected result, however it takes about 5 seconds to do so.
I realize that I can circumvent this issue simply by using the former method and perform a simple logical test on the value returned, however I would like to understand why the latter procedure is so much slower than the former. Am I doing anything wrong?
Thank you for your attention
mongodb mongodb-java
mongodb mongodb-java
asked Nov 9 at 12:53
João Matos
7731624
7731624
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53226075%2fmongodb-nearsphere-gets-slower-if-maxdistance-is-used%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password