geoSearch
geoSearch
重要
MongoDB 5.0 で削除
MongoDB 5.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"
書込み保証を使用します。