Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-11830

geo near query does not cover entire length of equator

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.5.5
    • Component/s: Geo
    • Environment:
    • Operating System:
      ALL
    • Steps To Reproduce:
      Hide

      2.5.5-pre-

      > db.c.insert({loc:{type:"Point",coordinates:[0,0]}})
      Insert WriteResult({ "ok" : 1, "n" : 1 })
      > db.c.insert({loc:{type:"Point",coordinates:[-1,0]}})
      Insert WriteResult({ "ok" : 1, "n" : 1 })
      > db.c.ensureIndex({loc:"2dsphere"})
      > db.c.find({loc:{$nearSphere:{$geometry:{type:"Point",coordinates:[180,0]},$maxDistance:10e1000000}}})
      { "_id" : ObjectId("528fa9b06ce2fec2710a135b"), "loc" : { "type" : "Point", "coordinates" : [  -1,  0 ] } }
      > db.c.find({loc:{$near:{$geometry:{type:"Point",coordinates:[180,0]},$maxDistance:10e1000000}}})
      { "_id" : ObjectId("528fa9b06ce2fec2710a135b"), "loc" : { "type" : "Point", "coordinates" : [  -1,  0 ] } }
      > db.runCommand({geoNear:"c", near:{type:"Point",coordinates:[180,0]},spherical:true})
      {
      	"ns" : "georepro.c",
      	"results" : [
      		{
      			"dis" : 19926073.25883961,
      			"obj" : {
      				"_id" : ObjectId("528fa9b06ce2fec2710a135b"),
      				"loc" : {
      					"type" : "Point",
      					"coordinates" : [
      						-1,
      						0
      					]
      				}
      			}
      		}
      	],
      	"stats" : {
      		"nscanned" : 2,
      		"avgDistance" : 19926073.25883961,
      		"maxDistance" : 19926073.25883961,
      		"time" : 7
      	},
      	"ok" : 1
      }

      2.4.9-pre-

      > db.c.insert({loc:{type:"Point",coordinates:[0,0]}})
      > db.c.insert({loc:{type:"Point",coordinates:[-1,0]}})
      > db.c.ensureIndex({loc:"2dsphere"})
      > db.c.find({loc:{$nearSphere:{$geometry:{type:"Point",coordinates:[180,0]},$maxDistance:10e1000000}}})
      { "_id" : ObjectId("528fa9b05142cd7d1e23d1bb"), "loc" : { "type" : "Point", "coordinates" : [  -1,  0 ] } }
      { "_id" : ObjectId("528fa99e5142cd7d1e23d1ba"), "loc" : { "type" : "Point", "coordinates" : [  0,  0 ] } }
      > db.c.find({loc:{$near:{$geometry:{type:"Point",coordinates:[180,0]},$maxDistance:10e1000000}}})
      { "_id" : ObjectId("528fa9b05142cd7d1e23d1bb"), "loc" : { "type" : "Point", "coordinates" : [  -1,  0 ] } }
      { "_id" : ObjectId("528fa99e5142cd7d1e23d1ba"), "loc" : { "type" : "Point", "coordinates" : [  0,  0 ] } }
      > db.runCommand({geoNear:"c", near:{type:"Point",coordinates:[180,0]},spherical:true})
      {
      	"ns" : "georepro.c",
      	"results" : [
      		{
      			"dis" : 19926073.261345826,
      			"obj" : {
      				"_id" : ObjectId("528fa9b05142cd7d1e23d1bb"),
      				"loc" : {
      					"type" : "Point",
      					"coordinates" : [
      						-1,
      						0
      					]
      				}
      			}
      		},
      		{
      			"dis" : 20037392.09826071,
      			"obj" : {
      				"_id" : ObjectId("528fa99e5142cd7d1e23d1ba"),
      				"loc" : {
      					"type" : "Point",
      					"coordinates" : [
      						0,
      						0
      					]
      				}
      			}
      		}
      	],
      	"stats" : {
      		"time" : 5,
      		"nscanned" : 2,
      		"avgDistance" : 19981732.679803267,
      		"maxDistance" : 20037392.09826071
      	},
      	"ok" : 1
      }

      Show
      2.5.5-pre- > db.c.insert({loc:{type:"Point",coordinates:[0,0]}}) Insert WriteResult({ "ok" : 1, "n" : 1 }) > db.c.insert({loc:{type:"Point",coordinates:[-1,0]}}) Insert WriteResult({ "ok" : 1, "n" : 1 }) > db.c.ensureIndex({loc:"2dsphere"}) > db.c.find({loc:{$nearSphere:{$geometry:{type:"Point",coordinates:[180,0]},$maxDistance:10e1000000}}}) { "_id" : ObjectId("528fa9b06ce2fec2710a135b"), "loc" : { "type" : "Point", "coordinates" : [ -1, 0 ] } } > db.c.find({loc:{$near:{$geometry:{type:"Point",coordinates:[180,0]},$maxDistance:10e1000000}}}) { "_id" : ObjectId("528fa9b06ce2fec2710a135b"), "loc" : { "type" : "Point", "coordinates" : [ -1, 0 ] } } > db.runCommand({geoNear:"c", near:{type:"Point",coordinates:[180,0]},spherical:true}) { "ns" : "georepro.c", "results" : [ { "dis" : 19926073.25883961, "obj" : { "_id" : ObjectId("528fa9b06ce2fec2710a135b"), "loc" : { "type" : "Point", "coordinates" : [ -1, 0 ] } } } ], "stats" : { "nscanned" : 2, "avgDistance" : 19926073.25883961, "maxDistance" : 19926073.25883961, "time" : 7 }, "ok" : 1 } 2.4.9-pre- > db.c.insert({loc:{type:"Point",coordinates:[0,0]}}) > db.c.insert({loc:{type:"Point",coordinates:[-1,0]}}) > db.c.ensureIndex({loc:"2dsphere"}) > db.c.find({loc:{$nearSphere:{$geometry:{type:"Point",coordinates:[180,0]},$maxDistance:10e1000000}}}) { "_id" : ObjectId("528fa9b05142cd7d1e23d1bb"), "loc" : { "type" : "Point", "coordinates" : [ -1, 0 ] } } { "_id" : ObjectId("528fa99e5142cd7d1e23d1ba"), "loc" : { "type" : "Point", "coordinates" : [ 0, 0 ] } } > db.c.find({loc:{$near:{$geometry:{type:"Point",coordinates:[180,0]},$maxDistance:10e1000000}}}) { "_id" : ObjectId("528fa9b05142cd7d1e23d1bb"), "loc" : { "type" : "Point", "coordinates" : [ -1, 0 ] } } { "_id" : ObjectId("528fa99e5142cd7d1e23d1ba"), "loc" : { "type" : "Point", "coordinates" : [ 0, 0 ] } } > db.runCommand({geoNear:"c", near:{type:"Point",coordinates:[180,0]},spherical:true}) { "ns" : "georepro.c", "results" : [ { "dis" : 19926073.261345826, "obj" : { "_id" : ObjectId("528fa9b05142cd7d1e23d1bb"), "loc" : { "type" : "Point", "coordinates" : [ -1, 0 ] } } }, { "dis" : 20037392.09826071, "obj" : { "_id" : ObjectId("528fa99e5142cd7d1e23d1ba"), "loc" : { "type" : "Point", "coordinates" : [ 0, 0 ] } } } ], "stats" : { "time" : 5, "nscanned" : 2, "avgDistance" : 19981732.679803267, "maxDistance" : 20037392.09826071 }, "ok" : 1 }

      Description

      It seems that $near, $nearSphere and geoNear in version 2.5 of mongodb won't return documents whose longitude is 180 degrees away from that in the coordinates given in the query. Version 2.4 will return these documents.

        Attachments

          Activity

            People

            Assignee:
            benety.goh Benety Goh
            Reporter:
            luke.lovett Luke Lovett
            Participants:
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved: