- geoSearch
- 重要- MongoDB 5.0 で削除- MongoDB5.0 では、非推奨の geoHaystackインデックスと - geoSearchコマンドが削除されます。代わりに、 またはサポートされている- $geoNear地理空間クエリ演算子 のいずれかを使用した2 dインデックスを使用してください。- MongoDB インスタンスを 5.0 にアップグレードし、featureCompatibilityVersion を - 5.0に設定すると、既存の geoHaystack インデックスがすべて削除されます。- geoSearchコマンドは MongoDB のhaystack インデックス機能へのインターフェースを提供します。 これらのインデックスは、他のクエリ(つまり、haystack)に基づいて結果を収集した後、ロケーション座標に基づいて結果を返すのに役立ちます。- geoSearchコマンドは、次のフィールドを含むドキュメントを受け入れます。フィールドタイプ説明- geoSearch- string - クエリするコレクション。 - search- ドキュメント - ドキュメントをフィルタリングするクエリ。 - near- 配列 - 点の座標。 - maxDistance- 数値 - 任意。 指定した点からの最大距離。 - limit- 数値 - 任意。 返されるドキュメントの最大数。 - readConcern- ドキュメント - 任意。読み取り保証 (read concern) を指定します。 - readConcernオプションの構文は、次のとおりです。- readConcern: { level: <value> }- 次の読み取り保証レベルが利用できます。 - "local"。これは、プライマリとセカンダリに対する読み取り操作での、デフォルトの読み取り保証レベルです。
- "available"。プライマリおよびセカンダリに対する読み取り操作に使用できます。- "available"は、プライマリおよびシャーディングされていないセカンダリに対して- "local"と同じように動作します。クエリは、インスタンスの最新データを返します。
- "majority"。WiredTiger ストレージ エンジンを使用するレプリカセットで使用できます。
- "linearizable"。- primaryの読み取り操作にのみ使用できます。
 - 読み取り保証 (read concern) のレベルについて詳しくは、「読み取り保証 (read concern) レベル」を参照してください。 - 読み取り保証 (read concern) レベルの詳細については、「読み取り保証 (read concern) レベル 」を参照してください。 - comment- any - 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。 - attr.command.cursor.commentフィールド内のmongod ログ メッセージ。
- command.commentフィールドのデータベースプロファイラー出力。
- command.commentフィールドの- currentOp出力。
 - コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。 
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです 
重要
このコマンドはサーバーレスインスタンスではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。
- MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン 
- MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン 
動作
Limit
特に指定されていない限り、 geoSearchコマンドの結果は50ドキュメントに制限されます。
シャーディングされたクラスター
geoSearch は、シャーディングされたクラスターではサポートされていません。
トランザクション
geoSearch は分散トランザクション内で使用できます。
重要
ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。
トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。
例
次の例で考えてみます。
db.runCommand({    geoSearch : "places",    near: [ -73.9667, 40.78 ],    maxDistance : 6,    search : { type : "restaurant" },    limit : 30 }) 
上記のコマンドでは、コレクションplaces内の座標[ -73.9667, 40.78 ]から最大 6 単位の距離を持つrestaurantのtypeが最大 30 件の結果まで返されます。
デフォルトの読み取り保証を上書き
デフォルトの読み取り保証 (read concern) レベル "local" を無効にするには、readConcern オプションを使用します。
レプリカセットに対する次の操作では、大多数のノードに書き込まれたことが確認されたデータの最新のコピーを読み取るために、"majority" の 読み取り保証を指定します。
注意
読み取り保証のレベルを問わず、ノード上の最新データにシステム内のデータの最新バージョンが反映されていない場合があります。
db.runCommand(    {       geoSearch: "places",       near: [ -73.9667, 40.78 ],       search : { type : "restaurant" },       readConcern: { level: "majority" }     } ) 
単一のスレッドでそれ自体の書き込みの読み取りを可能にするには、レプリカセットのプライマリに対して "majority" 読み取り保証と "majority" 書込み保証を使用します。