Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Índices geoespaciales

MongoDB ofrece varios índices y mecanismos de query para gestionar información geoespacial. Esta sección demuestra cómo crear y usar índices geoespaciales con el driver Ruby.

Los ejemplos en esta página utilizan una colección de muestra denominada restaurants en la base de datos de test. Un conjunto de datos de muestra está disponible para su descarga.

El siguiente es un documento de muestra de la colección restaurants:

{
"address": {
"building": "1007",
"coord": [ -73.856077, 40.848447 ],
"street": "Morris Park Ave",
"zipcode": "10462"
},
"borough": "Bronx",
"cuisine": "Bakery",
"grades": [
{ "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
{ "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
],
"name": "Morris Park Bake Shop",
"restaurant_id": "30075445"
}

El siguiente ejemplo crea un índice 2dsphere en el campo address.coord:

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test' )
client[:restaurants].indexes.create_one( { 'address.coord' => '2dsphere' })

Una vez creado el índice, puedes usar varios operadores para consultarlo, incluidos los operadores $near, $geoWithin, y $geoIntersects. El siguiente ejemplo utiliza el operador $near para encontrar todos los restaurantes dentro de 500 metros de las coordenadas especificadas.

client = Mongo::Client.new('mongodb://127.0.0.1:27017/test')
collection = client[:restaurants]
collection.find(
{ 'address.coord' =>
{ "$near" =>
{ "$geometry" =>
{ "type" => "Point", "coordinates" => [ -73.96, 40.78 ] },
"$maxDistance" => 500
}
}
}
).each do |doc|
#=> Yields a BSON::Document.
end

Para encontrar todos los documentos con una ubicación dentro del perímetro de un polígono dado, utilice el operador $geoWithin :

client = Mongo::Client.new('mongodb://127.0.0.1:27017/test')
collection = client[:restaurants]
collection.find(
{ "address.coord" =>
{ "$geoWithin" =>
{ "$geometry" =>
{ "type" => "Polygon" ,
"coordinates" => [ [ [ -73, 40 ], [ -74, 41 ], [ -72, 39 ], [ -73, 40 ] ] ]
}
}
}
}
).each do |doc|
#=> Yields a BSON::Document.
end

Volver

Text