Ключовата дума е sphere
за разграничаване между $near
и $nearSphere
.
Както знаете, $nearSphere
е посочено, че изчислява разстоянието с помощта на сферична геометрия. Това е свързано с картографска проекция
на Земята (изкривяване
). Където MongoDB 2d индексира
се базира на декартова система
и индекси на MongoDB 2dsphere
се базира на Geodesic
.
Стига теория, нека използваме няколко примера. Да кажем, че имаме два документа по-долу:
db.map.insert({ "_id": "Westfield London", "location": [ -0.22157, 51.507176 ] });
db.map.insert({ "_id": "Green Lanes Shopping Centre", "location": [ -0.098092, 51.576198 ] });
Ръководството за двата оператора уточнява, че можем да използваме:
2dsphere
индекс за данни за местоположение, определени като GeoJSON точки2d
индекс за данни за местоположение, определени като наследени двойки координати
Индекс:2dsphere, Заявка:GeoJSON
db.map.createIndex({"location": "2dsphere"});
db.map.find({"location":{"$nearSphere":{"$geometry":{"type":"Point", "coordinates":[ -0.127748, 51.507333 ] }}}});
db.map.find({"location":{"$near":{"$geometry":{"type":"Point", "coordinates":[ -0.127748, 51.507333 ]}}}});
В този случай и двете заявки ще върнат един и същ резултат, тъй като индексът се съхранява в 2dsphere
.
Резултат:
[ /* $nearSphere */
{"_id" : "Westfield London"},
{"_id" : "Green Lanes Shopping Centre"}
]
[ /* $near */
{"_id" : "Westfield London"},
{"_id" : "Green Lanes Shopping Centre"}
]
Индекс:2d , Заявка:Наследени координати
db.map.createIndex({"location": "2d"});
db.map.find({"location":{"$nearSphere":[ -0.127748, 51.507333 ]}});
db.map.find({"location":{"$near":[ -0.127748, 51.507333 ]}});
Това е мястото, където се случва разграничението, резултатът за $nearSphere
се изчислява сферично въпреки индекса, докато $near
се изчислява в плоска проекция.
Резултат:
[ /* $nearSphere */
{"_id" : "Westfield London"},
{"_id" : "Green Lanes Shopping Centre"}
]
[ /* $near */
{"_id" : "Green Lanes Shopping Centre"},
{"_id" : "Westfield London"}
]
Вижте основно:JS тестов скрипт от горния пример. Това беше тествано с помощта на MongoDB v3.4.4.
Вижте също Геопространствени индекси и заявки .