sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvad er forskellen mellem $near og $nearSphere i Mongo?

Nøgleordet er sphere for at skelne mellem $near og $nearSphere .

Som du ved, $nearSphere angives at beregne afstand ved hjælp af sfærisk geometri. Dette er relateret til jordens kortprojektion (forvrængning ). Hvor MongoDB 2d indekserer er baseret på kartesisk og MongoDB 2dsphere-indekser er baseret på Geodesic .

Nok teori, lad os bruge nogle eksempler. Lad os sige, at vi har to dokumenter som nedenfor:

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

Manualen til begge operatører angiver, at vi kan bruge:

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

I dette tilfælde vil begge forespørgsler returnere det samme resultat, fordi indekset er gemt i 2dsphere .

Resultat:

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

Indeks:2d , Forespørgsel:Ældre koordinater

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

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

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

Det er her forskellen sker, resultatet for $nearSphere beregnes sfærisk på trods af indekset, mens $near beregnes i flad projektion.

Resultat:

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

Se resistens:JS-testscript af ovenstående eksempel. Dette blev testet ved hjælp af MongoDB v3.4.4.

Se også Geospatiale indekser og forespørgsler .




  1. Sådan afinstalleres mongodb fra Windows

  2. phpredis-udvidelsen virker ikke, kan ikke indlæse 'redis.so'

  3. Database over 2GB i MongoDB

  4. Find de første 20 dokumenter fra samlingen i mongodb