MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

В Mongo каква е разликата между $near и $nearSphere?

Ключовата дума е 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

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.

Вижте също Геопространствени индекси и заявки .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb възстановяване премахнати записи

  2. Композитен ключ на MongoDB:InvalidOperationException:{document}. Самоличността не се поддържа

  3. Mongodb C# драйвер Неподдържан филтър грешка с конкретен linq предикат

  4. Mongoose TypeError:Потребителят не е конструктор

  5. MongoDB $size