MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jaka jest różnica między $near i $nearSphere w Mongo?

Słowo kluczowe to sphere rozróżniać $near i $nearSphere .

Jak wiesz, $nearSphere mówi się, aby obliczyć odległość za pomocą geometrii sferycznej. Jest to związane z projekcją mapy Ziemi (zniekształcenie ). Gdzie indeksy MongoDB 2d jest oparty na kartezjańskim i Indeksy MongoDB 2dsphere jest oparty na Geodezji .

Dość teorii, użyjmy kilku przykładów. Załóżmy, że mamy dwa dokumenty, jak poniżej:

db.map.insert({ "_id": "Westfield London", "location": [ -0.22157, 51.507176 ] });
db.map.insert({ "_id": "Green Lanes Shopping Centre", "location": [ -0.098092, 51.576198 ] });

Instrukcja dla obu operatorów określa, że ​​możemy użyć:

Indeks:2dsphere , zapytanie: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 ]}}}});

W takim przypadku oba zapytania zwrócą ten sam wynik, ponieważ indeks jest przechowywany w 2dsphere .

Wynik:

[ /* $nearSphere */
    {"_id" : "Westfield London"},
    {"_id" : "Green Lanes Shopping Centre"}
]
[ /* $near */
    {"_id" : "Westfield London"},
    {"_id" : "Green Lanes Shopping Centre"}
]

Indeks:2d , zapytanie:współrzędne starsze

db.map.createIndex({"location": "2d"});

db.map.find({"location":{"$nearSphere":[ -0.127748, 51.507333 ]}});

db.map.find({"location":{"$near":[ -0.127748, 51.507333 ]}});

Tutaj następuje rozróżnienie, wynik dla $nearSphere jest obliczany sferycznie pomimo indeksu, natomiast $near obliczana jest w rzucie płaskim.

Wynik:

[ /* $nearSphere */
    {"_id" : "Westfield London"},
    {"_id" : "Green Lanes Shopping Centre"}
]
[ /* $near */
    {"_id" : "Green Lanes Shopping Centre"},
    {"_id" : "Westfield London"}
]

Zobacz gist:skrypt testowy JS z powyższego przykładu. Zostało to przetestowane przy użyciu MongoDB v3.4.4.

Zobacz też Indeksy i zapytania geoprzestrzenne .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak tworzyć aplikacje dla MongoDB i Redpanda przy użyciu Docker Compose

  2. Porównaj tablice i zwróć różnicę

  3. Czy mongo może automatycznie usuwać kolekcje?

  4. mongo używając mongoose w węźle chcesz użyć lub i w zapytaniu

  5. db.getUser w node.js mongodb