地理空間検索
地理空間クエリをサポートするために、MongoDB は 地理空間インデックス と 地理空間クエリ演算子 を提供します。
地理空間クエリの実行の詳細については、サーバー マニュアルの地理空間クエリを参照してください。
前提条件
このガイドのコード例を実行するには、次のコンポーネントを設定する必要があります。
test.restaurants
ドキュメントrestaurants.json
アセット の ファイルのドキュメントが入力された {0 コレクション。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
インスタンスを 宣言して定義します。
次のコードは、ポート27017
のlocalhost
で実行されているスタンドアロンの MongoDB 配置に接続します。 次に、 test
データベースを参照するためのdatabase
変数と、 restaurants
コレクションを参照するためのcollection
変数を定義します。
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()