文档菜单
文档首页
/ / /
Scala
/

地理空间搜索

本页内容

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

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

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

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

  • Atest.restaurants 集合中包含从 restaurants.json 文件中获取的文档,该文件位于 文档资源 GitHub

  • 以下导入语句

import org.mongodb.scala._
import org.mongodb.scala.model.geojson._
import org.mongodb.scala.model.Indexes
import org.mongodb.scala.model.Filters

注意

本指南使用 Observable 隐式值,如《快速入门指南》中所述快速入门指南.

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

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

val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("test")
val collection: MongoCollection[Document] = database.getCollection("restaurants")

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

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

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

collection.createIndex(Indexes.geo2dsphere("contact.location")).printResults()

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

以下示例返回至少1000.0米和最多5000.0米远离指定的GeoJSONPoint实例的文档,并按从近到远的顺序自动排序。

val refPoint = Point(Position(-73.9667, 40.78))
collection.find(Filters.near("contact.location", refPoint, 5000.0, 1000.0)).printResults()

返回

文本搜索