文档菜单
文档首页
/ / /
Java 反应式流驱动程序
/

地理空间搜索

本页内容

  • 先决条件
  • 连接到 MongoDB 部署
  • 创建 2dsphere 索引
  • 查询接近 GeoJSON 点的位置

为了支持地理空间查询,MongoDB 提供了地理空间索引和地理空间查询运算符。

要了解有关执行地理空间查询的更多信息,请参阅地理空间查询服务器手册。

您必须设置以下组件才能运行本指南中的代码示例

  • Atest.restaurants 集合应包含来自 restaurants.json 文件的文档,该文件位于文档资产 GitHub。

  • 以下导入语句

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;

重要

本指南使用 Subscriber 实现,这些实现已在 快速入门指南 中描述快速入门指南.

首先,连接到 MongoDB 部署,然后声明并定义 MongoDatabaseMongoCollection 实例。

以下代码连接到运行在本地主机 localhost 的端口 27017 上的独立 MongoDB 部署。然后,定义 database 变量以引用 test 数据库,定义 collection 变量以引用 restaurants 集合。

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("restaurants");

要了解更多有关连接到 MongoDB 部署的信息,请参阅连接到 MongoDB 教程。

要创建 2dsphere 索引,使用 Indexes.geo2dsphere() 辅助函数创建 2dsphere 索引的规范。将规范传递给 MongoCollection.createIndex() 方法以创建索引。

以下示例在 restaurants 集合中 "contact.location" 字段上创建一个 2dsphere 索引。

MongoCollection<Document> collection = database.getCollection("restaurants");
collection.createIndex(Indexes.geo2dsphere("contact.location"))
.subscribe(new PrintSubscriber<String>());

MongoDB 提供了各种地理空间查询运算符。为了方便创建地理空间查询过滤器,驱动程序提供了 Filters 类和 com.mongodb.client.model.geojson 包。

以下示例返回至少 1000 米且最多 5000 米远的文档,按最近到最远排序。

Point refPoint = new Point(new Position(-73.9667, 40.78));
collection.find(Filters.near("contact.location", refPoint, 5000.0, 1000.0))
.subscribe(new PrintDocumentSubscriber());

返回

文本搜索