地理空間クエリをサポートするために、MongoDB は 地理空間インデックス と 地理空間クエリ演算子 を提供します。
地理空間クエリの実行の詳細については、サーバー マニュアルの「地理空間クエリ 」を参照してください。
前提条件
このガイドのコード例を実行するには、次のコンポーネントを設定する必要があります。
test.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 配置への接続
まず、MongoDB 配置に接続し、 インスタンスとMongoDatabase MongoCollectionインスタンスを 宣言して定義します。
次のコードは、ポート27017のlocalhostで実行されているスタンドアロンの MongoDB 配置に接続します。 次に、 testデータベースを参照するためのdatabase変数と、 restaurantsコレクションを参照するためのcollection変数を定義します。
MongoClient mongoClient = MongoClients.create();MongoDatabase database = mongoClient.getDatabase("test");MongoCollection<Document> collection = database.getCollection("restaurants");MongoDB 配置への接続の詳細については、「 MongoDB への接続」チュートリアルを参照してください。
2 dsphere インデックスの作成
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>());GeoJSON ポイント近くのロケーションのクエリ
MongoDB はさまざまな地理空間クエリ演算子を提供します。 地理空間クエリフィルターの作成を容易にするために、ドライバーはFiltersクラスとcom.mongodb.client.model.geojsonパッケージを提供します。
次の例では、指定された GeoJSON Pointインスタンスから少なくとも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());