historia - mongodb caracteristicas
Cómo almacenar información geoespacial en mongoDB (5)
De acuerdo con la documentación de mongoDB ( link ) si desea almacenar información geoespacial en un campo de documento, tiene dos opciones, una matriz o un documento incrustado, y el orden debe ser siempre la longitud, la latitud.
Si quiero usar un documento incrustado, ¿cómo puedo garantizar el orden del campo?
¿O deben los campos en el documento incrustado tener un nombre específico?
La documentación de MongoDB dice lo siguiente:
Un campo llamado coordenadas que especifica las coordenadas del objeto. Si especifica las coordenadas de latitud y longitud, indique primero la longitud y luego la latitud :
Los valores de longitud válidos están entre -180 y 180, ambos inclusive. Los valores de latitud válidos están entre -90 y 90 (ambos inclusive).
Documentación oficial de MongoDB: https://docs.mongodb.com/manual/geospatial-queries/#geospatial-indexes
Le aconsejaría que nombre su campo: x and y
, en lugar de longitude/latitude
, porque después de una actualización, la longitud y la latitud se reordenarán de forma alfabética, por lo tanto invertida.
Los índices geoespaciales nos permiten encontrar cosas basadas en la ubicación geográfica.
Tenemos 2 opciones:
- 2D
- 3D
En 2-D, tenemos un plano cartesiano con coordenadas x
& y
y un montón de objetos diferentes.
El documento debe almacenar algún tipo de ubicación x
, y
con ensureIndex({''location'':''2d'', ''type'':1})
.
La opción de type
(opcional) especifica la dirección del índice, es decir, ascendente o descendente. Puede ser un índice compuesto.
Ejemplo de uso:
Para encontrar lugares cercanos use el comando:
db.collectionName.find({location: {$near:[x,y]}})
En la práctica, la forma en que esto se usa a menudo es a través de un limit
. Para limitar los resultados, por ejemplo, agregue 20 .limit(20)
.
db.collectionName.find({location: {$near:[x,y]}}).limit(20)
con un documento incrustado, independientemente del nombre del campo en el documento incrustado, el primer campo debe contener el valor de longitud y el segundo campo debe contener el valor de latitud. Por ejemplo:
db.zips2.insert( { _id: 1, city: "b", loc: { x: -73.974, y: 40.764 } } )
db.zips2.insert( { _id: 2, city: "b", loc: { x: -73.981, y: 40.768 } } )
Aquí el campo x sería la longitud; y el campo y sería la latitud.
Saludos
docs.mongodb.org/manual/core/geospatial-indexes/…
"Todos los documentos deben almacenar datos de ubicación en el mismo orden. Si usa la latitud y la longitud como su sistema de coordenadas, siempre almacene la longitud primero . Los operadores de índice esférico 2d de MongoDB solo reconocen el orden [longitud, latitud]".
Aquí hay un buen post sobre consultas geoespaciales en MongoDB en caso de que lo necesite.