Questo capitolo introduce la query geospaziale di MongoDB, che supporta query di intersezione geometrica e contenimento.

Scenari di applicazione:

  • Disegna un cerchio sulla mappa e richiedi i dati all'interno del cerchio.

Tutorial Prerequisito

Formati di archiviazione dati geospaziali per MongoDB

I prerequisiti per interrogare i dati in base alla distanza sono i seguenti:

  • Ogni dato del documento contiene un campo per l'archiviazione dei dati delle coordinate, ad esempio: il campo posizione archivia le coordinate di un negozio.
  • Creare un indice spaziale 2dsphere o 2d.

Operatore $geoWithin

Viene comunemente utilizzato per interrogare punti di coordinate contenuti all'interno di un range geometrico specificato, ad esempio: quando si cercano case disegnando su una mappa, disegnare un'area sulla mappa e interrogare le case all'interno di quell'area.

Formato sintass:

{
   <campo posizione>: { // Campo di interrogazione
      $geoWithin: {
         $geometry: {
            type:  , // Supporta solo Poligono o Multipoligono.
            coordinates: [ <coordinate> ]  // Raccolta di punti di coordinate geometriche
         }
      }
   }
}

Esempio:

db.luoghi.find(
   {
     loc: { // Il campo loc memorizza i dati delle coordinate
       $geoWithin: {
          $geometry: {
             type: "Poligono" ,
             coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Trova dati all'interno di questa area geometrica
          }
       }
     }
   }
)

Interroga i dati del documento all'interno dell'area geometrica specificata nella raccolta di luoghi.

Operatore $geoIntersects

La differenza rispetto a $geoWithin è che $geoIntersects viene utilizzato per determinare se c'è un'intersezione tra due geometrie.

Formato:

{
  <campo posizione>: { // Campo che memorizza punti di coordinate geometriche
     $geoIntersects: {
        $geometry: {
           type: "<tipo oggetto geojson>" , // Tipo geometrico
           coordinates: [ <coordinate> ] // Raccolta di punti di coordinate geometriche, interrogare dati con intersezione con questa geometria
        }
     }
  }
}

Esempio:

db.luoghi.find(
   {
     loc: { // Il campo loc memorizza i dati dell'area, che è una forma geometrica
       $geoIntersects: {
          $geometry: {
             type: "Poligono" ,
             coordinates: [
               [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Interrogare i dati con intersezione con questa geometria
             ]
          }
       }
     }
   }
)