Docs Menu
Docs Home
/ / /
Java Reactive Streams ドライバー
/

地理空間検索

項目一覧

  • 前提条件
  • MongoDB 配置への接続
  • 2 dsphere インデックスの作成
  • GeoJSON ポイント近くのロケーションのクエリ

地理空間クエリをサポートするために、MongoDB は 地理空間インデックス と 地理空間クエリ演算子 を提供します。

地理空間クエリの実行の詳細については、サーバー マニュアルの地理空間クエリを参照してください。

このガイドのコード例を実行するには、次のコンポーネントを設定する必要があります。

  • Atest.restaurants コレクション populated with documents from therestaurants.json ファイル in the documentation assets 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 配置に接続し、 インスタンスとMongoDatabase MongoCollectionインスタンスを 宣言して定義します。

次のコードは、ポート27017localhostで実行されているスタンドアロンの MongoDB 配置に接続します。 次に、 testデータベースを参照するためのdatabase変数と、 restaurantsコレクションを参照するためのcollection変数を定義します。

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("restaurants");

MongoDB 配置への接続の詳細については、「 MongoDB への接続」チュートリアルを参照してください。

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>());

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());

戻る

テキスト検索