sql >> Database >  >> NoSQL >> MongoDB

Wat is in Mongo het verschil tussen $near en $nearSphere?

Het sleutelwoord is sphere om onderscheid te maken tussen $near en $nearSphere .

Zoals u weet, $nearSphere wordt vermeld om afstand te berekenen met behulp van sferische geometrie. Dit is gerelateerd aan de Earth kaartprojectie (vervorming ). Waar MongoDB 2d-indexen is gebaseerd op Cartesian en MongoDB 2dsphere-indexen is gebaseerd op Geodesic .

Genoeg theorie, laten we wat voorbeelden gebruiken. Laten we zeggen dat we twee documenten hebben, zoals hieronder:

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

De handleiding voor beide operators specificeert dat we kunnen gebruiken:

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

In dit geval zullen beide zoekopdrachten hetzelfde resultaat opleveren, omdat de index is opgeslagen in 2dsphere .

Resultaat:

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

Index:2d , Zoekopdracht:oude coördinaten

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

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

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

Hier vindt het onderscheid plaats, het resultaat voor $nearSphere wordt ondanks de index sferisch berekend, terwijl $near wordt berekend in vlakke projectie.

Resultaat:

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

Zie gist:JS-testscript van bovenstaand voorbeeld. Dit is getest met MongoDB v3.4.4.

Zie ook Geospatial-indexen en -query's .




  1. Gebruik javascript-variabele als een waarde van $regex in MongoDB-query

  2. Hoe de details van mongo db op te halen en in een object te verzenden of op te slaan in de nodejs Fork-methode?

  3. Kan ik eenvoudig alle velden van een subdocument retourneren als velden in het document op het hoogste niveau met behulp van het aggregatieraamwerk?

  4. Spring Data Redis - UUID-id - ConverterNotFoundException