此版本的文档已存档,不再提供支持。查看 最新文档,了解如何升级您的 Scala 驱动程序版本。
为了支持地理空间查询, MongoDB提供了地理空间索引和地理空间查询运算符。
要学习;了解有关执行地理空间查询的更多信息,请参阅服务器手册中的地理空间查询。
先决条件
您必须设置以下组件才能运行本指南中的代码示例:
一个
test.restaurants集合,其中填充了来自文档资产Github中restaurants.json文件的文档。以下 import 语句:
import org.mongodb.scala._ import org.mongodb.scala.model.geojson._ import org.mongodb.scala.model.Indexes import org.mongodb.scala.model.Filters
注意
本指南使用快速入门入门中所述的Observable隐式。
连接到 MongoDB 部署
首先,连接到 MongoDB 部署,然后声明并定义MongoDatabase和MongoCollection实例。
以下代码连接到在端口27017上的localhost上运行的独立 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 索引
要创建2dsphere索引,请使用Indexes.geo2dsphere()辅助程序为2dsphere索引创建规范。 将规范传递给MongoCollection.createIndex()方法以创建索引。
以下示例在集合中的"contact.location"字段上创建2dsphere索引:
collection.createIndex(Indexes.geo2dsphere("contact.location")).printResults()
查询 GeoJSON 点附近的位置
MongoDB提供各种地理空间查询操作符。为了便于创建地理空间查询筛选条件,驱动程序提供了 Filters 类和 com.mongodb.client.model.geojson包。
以下示例返回距离指定GeoJSON Point实例至少1000.0米、最多5000.0米的文档,并从最近到最远自动排序:
val refPoint = Point(Position(-73.9667, 40.78)) collection.find(Filters.near("contact.location", refPoint, 5000.0, 1000.0)).printResults()