usar historia estructura ejemplos cuando caracteristicas mongodb geospatial

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