es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

teniendo dificultades con consultas geoespaciales en mongo

Llevo varios días luchando para hacer que las consultas funcionen. En este momento, mi modelo parece esto:

class Geojson
  include Mongoid::Document

  field :type, type: String, default: 'Point'
  field :coordinates, type: Array

  index({coordinates: "2dsphere"}, { bits: 12}) 
end

La siguiente consulta devuelve nil:

Geojson.find(:coordinates => {"$nearSphere" => [-70.1197340629727, 4.67071244438]})

Estas son las instancias actuales en mi base de datos:

[#<geojson _id:="" 61b7b21a9eb0c9ef0aa5626d,="" type:="" "point",="" coordinates:="" [-74.13041168951031,="" 4.6638117]="">,
#<geojson _id:="" 61b7b2619eb0c9ef0aa5626e,="" type:="" "point",="" coordinates:="" [-74.1213041168951,="" 4.5638117]="">] 

Soy capaz de hacer consultas similares en mongosh sin problemas, sin embargo, no estoy seguro de dónde está el error al hacerlo directamente en Rails.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que la consulta no está correctamente formateada en Ruby on Rails. En lugar de usar una flecha hash (=>), deberías usar la notación de símbolos (:clave => valor) o la sintaxis más simple (clave: valor). Además, debes usar el método “near” en lugar de “find” para realizar una consulta geoespacial basada en la proximidad.

    Así es como debería lucir el código corregido:

    Geojson.near(coordinates: { '$nearSphere': [-70.1197340629727, 4.67071244438] })
    

    Esto debería devolver una relación de ActiveRecord con los documentos más cercanos según las coordenadas proporcionadas.

Comments are closed.