地理空间搜索
为了支持地理空间查询,MongoDB 提供了地理空间索引和地理空间查询运算符。
要了解更多关于执行地理空间查询的信息,请参阅地理空间查询 服务器手册。
先决条件
您必须设置以下组件才能运行本指南中的代码示例
A
test.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 部署
首先,连接到MongoDB部署,然后声明并定义MongoDatabase
和MongoCollection
实例。
以下代码连接到在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索引
要创建一个2dsphere
索引,使用Indexes.geo2dsphere()
辅助函数创建一个2dsphere
索引的规范。将规范传递给MongoCollection.createIndex()
方法来创建索引。
以下示例在集合中创建一个针对"contact.location"
字段的2dsphere
索引。
collection.createIndex(Indexes.geo2dsphere("contact.location")).printResults()
根据GeoJSON点查询位置
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()