2014-09-17 5 views
6

Ich indizierte das Feld loc auf 2dsphere und ich bin nicht in der Lage, die geowithin Abfrage auf Punkt Typ GeoJson Daten auszuführen. HierMongoDB: Kann keine Abfrage kanonisch machen: BadValue schlechte geo Abfrage

ist die Abfrage:

db.test.find({ loc : 
        { $geoWithin : 
         { $geometry : 
          { type : "Polygon" , 
          coordinates : [ [ [-74.6862705412253, 40.42341005] , 
               [-75.0846179, 39.9009465 ], 
               [-74.20570119999999, 41.0167639 ] 
              ] 
              ] 
          } 
         } 
         } 
       } 

Ausgang:

uncaught exception: error: { 
"$err" : "Can't canonicalize query: BadValue bad geo query", 
"code" : 17287 
} 

Dokumentstruktur:

  { 
      "_id" : ObjectId("53d15e7132e7b7978c472e6e"), 
      "loc" : { 
        "type" : "Point", 
        "coordinates" : [ -74.6862705412253, 40.42341005 ] 
        }, 

     } 

Indizes:

{ 
"0" : { 
    "v" : 1, 
    "key" : { 
     "_id" : 1 
    }, 
    "name" : "_id_", 
    "ns" : "collab.test" 
}, 
"1" : { 
    "v" : 1, 
    "key" : { 
     "loc" : "2dsphere" 
    }, 
    "name" : "TestLocationIndex", 
    "ns" : "collab.test", 
    "2dsphereIndexVersion" : 2 
} 

}

Aber, $ Polygon funktioniert gut auf den gleichen Dokumenten. Ich versuche zu verstehen, warum Geowithin nicht funktioniert?

Antwort

13

Da Ihr Polygon nicht geschlossen ist, benötigen Sie tatsächlich ein Minimum von vier Punkten für ein gültiges Polygon, wobei der erste Punkt am Ende wiederholt wird, siehe GeoJSON Polygon docs. Die Fehlermeldung könnte etwas hilfreicher sein, das muss gesagt werden. Dies gilt auch für die Polygonformate Well Known Text (WKT) und Well Known Binary (WKB), also keine Besonderheit von GeoJSON.

Ihre Abfrage sollte wie folgt funktionieren:

db.test.find({loc : 
       {$geoWithin : 
        {$geometry : 
         {type : "Polygon" , 
          coordinates : [[[-74.6862705412253, 40.42341005] , 
              [-75.0846179, 39.9009465], 
              [-74.20570119999999, 41.0167639], 
              [-74.6862705412253, 40.42341005]]]          
         } 
        } 
       } 
      } 
+0

Sie sind sehr willkommen. Die räumlichen MongoDB-Fehler können ein wenig hilfreich sein. –