Para suportar queries geoespaciais, MongoDB fornece índices geoespaciais e operadores de consulta geoespacial.
Para saber mais sobre como executar queries geoespaciais, consulte Queries geoespaciais no manual do servidor.
Pré-requisitos
Você deve configurar os seguintes componentes para executar os exemplos de código neste guia:
Uma coleção
test.restaurantspreenchida com documentos do arquivorestaurants.jsonnos ativos de documentação do Github.As seguintes declarações de importação:
import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoCollection; import com.mongodb.reactivestreams.client.MongoDatabase; import com.mongodb.client.model.geojson.*; import com.mongodb.client.model.Indexes; import com.mongodb.client.model.Filters; import org.bson.Document;
Importante
Este guia usa implementações personalizadas de Subscriber , que são descritas no guia Amostra de implementações personalizadas de assinantes .
Conecte-se a um MongoDB deployment
Primeiro, conecte a um MongoDB deployment e, em seguida, declare e defina as instâncias MongoDatabase e MongoCollection .
O código a seguir se conecta a uma MongoDB deployment standalone em execução em localhost na porta 27017. Em seguida, define a variável database para fazer referência ao banco de dados test e a variável collection para fazer referência à coleção restaurants :
MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("restaurants");
Para saber mais sobre como se conectar a sistemas do MongoDB, consulte o tutorial Conectar ao MongoDB .
Crie o índice dsphere 2
Para criar um índice 2dsphere , utilize o auxiliar Indexes.geo2dsphere() para criar uma especificação para o índice 2dsphere . Passe a especificação para o método MongoCollection.createIndex() para criar o índice.
O exemplo seguinte cria um índice 2dsphere no campo "contact.location" na coleção restaurants :
MongoCollection<Document> collection = database.getCollection("restaurants"); collection.createIndex(Indexes.geo2dsphere("contact.location")) .subscribe(new PrintSubscriber<String>());
Query para localizações próximas a um ponto GeoJSON
O MongoDB fornece vários operadores de query geoespacial. Para facilitar a criação de filtros de consulta geoespacial, o driver fornece a classe Filters e o pacote com.mongodb.client.model.geojson .
O exemplo a seguir retorna documentos que estão a pelo menos 1000 metros e no máximo a 5000 metros da instância GeoJSON Point especificada, classificados do mais próximo para o mais distante:
Point refPoint = new Point(new Position(-73.9667, 40.78)); collection.find(Filters.near("contact.location", refPoint, 5000.0, 1000.0)) .subscribe(new PrintDocumentSubscriber());