2016-02-03 4 views
1

Я создал фиктивную коллекцию месторасположения с парой документов:

{ 
    "_id": ObjectId("56b1c6c32798710b058b4568"), 
    "title": "place1", 
    "coords": { 
    "lng": -77.0057694, 
    "lat": 38.8844788 
    } 
} 

{ 
    "_id": ObjectId("56b1c8032798710c058b4567"), 
    "title": "place2", 
    "coords": { 
    "lng": -77.042787, 
    "lat": 38.926703 
    } 
} 

Поле "Coords" имеет индекс в 2d:

/** locations indexes **/ 
db.getCollection("locations").ensureIndex({ 
    "coords": "2d" 
},[ 

]); 

следующий запрос возвращает 0 результатов, хотя я ожидаю, что он вернет оба документа:

{ 
    "coords": { 
    "$near": { 
     "lng": -77.023362, 
     "lat": 38.901002 
    }, 
    "$maxDistance": 0.002 
    } 
} 

Расстояние между точками в обоих документах составляет около 6 км, тогда как точка в запросе находится в середине их, и $ maxDistance составляет около 13 км (13/6391 ~ = 0,002 радиан)

Любые идеи, почему это не работает?

MongoDB v. 3.0.1

ответ

4

Я заметил, ваши документы коллекции не соответствуют legacy format или GeoJSON format геопространственных индексов и запросов.

При создании коллекций с геопространственными данными, пожалуйста, не смешивайте два разных формата. Я бы рекомендовал использовать форматы GeoJSON движение вперед:

{ "title" : "place1", 
    "coords" : { 
     "type" : "Point", 
     "coordinates" : [ -77.0057694, 38.8844788 ] 
       } 
} 

{ "title" : "place2", 
    "coords" : { 
     "type" : "Point", 
     "coordinates" : [ -77.042787, 38.926703 ] 
       } 
} 

После создания коллекции мы должны создать 2dsphere index по координатам:

db.yourCollection.createIndex({coords:"2dsphere"}) 

С созданной коллекцией и индексом мы теперь имеем для запроса Набор данных с $nearSphere:

db.yourCollection.find({ "coords": { $nearSphere:[-77.023362,38.901002],$maxDistance: 0.002 } }) 

Когда я бегу над сценарием на моей машине это выход я получаю:

db.yourCollection.find({ "coords": { $nearSphere:[-77.023362,38.901002],$maxDistance: 0.002 } }) 

{ "_id" : ObjectId("56bd1153439b16ea3a0847ed"), "title" : "place1", "coords" : { "type" : "Point", "coordinates" : [ -77.0057694, 38.8844788 ] } } 
{ "_id" : ObjectId("56bd1249439b16ea3a0847ee"), "title" : "place2", "coords" : { "type" : "Point", "coordinates" : [ -77.042787, 38.926703 ] } } 

Наконец-то обязательно используйте последнюю стабильную версию MongoDB для исправления ошибок и общих улучшений. В настоящее время для v3.0 это v3.0.9, а для v3.2 - v3.2.1

Смежные вопросы