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

mongodb filtra i documenti con longitudine, latitudine e distanza particolare

Prima di iniziare aggiungerei due punti-

  1. Quando usi mongo, inserisci sempre le posizioni in modo [long., lat.]
  2. Specifica il tipo di geometria che stai inserendo. Fare riferimento alla documentazione di mongoDB per maggiori informazioni sui tipi.

Venendo alla tua domanda, ho aggiunto tre punti in quanto la tua domanda e i miei dati sono come di seguito-

> db.test.find()
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }
{ "_id" : "Majestic", "type" : "Point", "loc" : [ 77.5712, 12.9766 ] }
{ "_id" : "ShanthiNgr", "type" : "Point", "loc" : [ 77.6836, 12.8486 ] }

Ho fornito il tipo:"Punto" perché questa è una chiave riservata per l'utilizzo di posizioni di tipo sferico in mongo. Inoltre ho aggiunto [long, lat] per posizione. Successivamente ho aggiunto un indice 2dSphere sul campo loc.

db.test.createIndex({loc:"2dsphere"})

Quindi ho eseguito la query di seguito per conoscere la distanza da Marathahalli [77.6974,12.9591]-

> db.test.aggregate([ {$geoNear: { near :{type: "Point", coordinates:[77.6974,12
.9591]}, distanceField: "distance", spherical: true } } ])
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ], "distance": 9583.305405402776 }
{ "_id" : "ShanthiNgr", "type" : "Point", "loc" : [ 77.6836, 12.8486 ], "distance" : 12391.53898270671 }
{ "_id" : "Majestic", "type" : "Point", "loc" : [ 77.5712, 12.9766 ], "distance": 13828.057829128267 }

La query sopra è solo a scopo di test per conoscere la distanza. Indica la distanza in metri così posso convertirla facilmente in km.

Ora ho eseguito sotto la query per trovare posizioni da Marathahalli entro 10 km. distanza e ho ottenuto il risultato desiderato-

> db.test.find({ loc:{ $near:{ $geometry: {type: "Point" , coordinates:[77.6974,12.9591] }, $maxDistance:10000 }}})
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }

Ho riscontrato alcuni problemi con l'approccio che stavi cercando-

  • Le posizioni devono essere fornite in modo [long, lat].
  • type:"Punto" deve essere fornito per utilizzare la posizione del tipo di punto. È una parola chiave riservata.
  • La distanza sarà misurata in metri qui. In alcuni punti viene preso in radianti anche a Mongo. Fare riferimento a questo mongoDB doc per maggiori informazioni sulla distanza in radianti.

Spero di esserti stato d'aiuto... buona giornata...:)