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.

MongoDB y consultas geoespaciales: especificador geográfico desconocido: $geometry: null

Estoy experimentando con MongoDB y consultas geoespaciales. He creado la siguiente colección:

shape> db.shape.find()
[
  {
    _id: ObjectId("61ab50d2056b5357b5e23e56"),
    name: 'Point1',
    structure: { type: 'Point', coordinates: [ 2.5, 2.5 ] }
  },
  {
    _id: ObjectId("61ab5337056b5357b5e23e57"),
    name: 'Point2',
    structure: { type: 'Point', coordinates: [ 5, 5 ] }
  },
  {
    _id: ObjectId("61ab533e056b5357b5e23e58"),
    name: 'Point3',
    structure: { type: 'Point', coordinates: [ 9, 9 ] }
  },
  {
    _id: ObjectId("61ab5b4d056b5357b5e23e64"),
    name: 'square',
    structure: {
      type: 'Polygon',
      coordinates: [ [ [ 0, 0 ], [ 0, 5 ], [ 5, 5 ], [ 5, 0 ], [ 0, 0 ] ] ]
    }
  }
]

Luego intenté lo siguiente:

var square = db.shape.find({name: "square"});
db.shape.find({structure: { $geoWithin: { $geometry: square.structure}}});

Y obtengo este error:

MongoServerError: unknown geo specifier: $geometry: null

¿Por qué $geometry es nulo?

Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “unknown geo specifier: $geometry: null” significa que el especificador $geometry no es reconocido por MongoDB como un operador geoespacial válido. En este caso, es probable que se deba al uso del operador $geometry con una variable (square.structure) que contiene un documento en lugar de pasar directamente la forma geoespacial.

    Para solucionar esto, puedes pasar las coordinates directamente en lugar de usar la variable square.structure, de la siguiente manera:

    var square = db.shape.findOne({name: "square"});
    db.shape.find({structure: {$geoWithin: {$geometry: {type: "Polygon", coordinates: square.structure.coordinates}}}});
    

    Esto debería devolver todos los documentos dentro de la colección shape que se encuentren dentro del polígono square.

Comments are closed.