AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

find(データベースコマンド)

find

クエリを実行し、結果の最初のバッチとカーソル ID を返します。クライアントはその情報からカーソルを作成できます。

Tip

mongoshでは、このコマンドは db.collection.find() または db.collection.findOne() ヘルパー メソッドを通して実行することもできます。

ヘルパー メソッドはmongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。

このコマンドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

重要

このコマンドは、M0 およびフレックス クラスターで限定的にサポートされています。詳細については、「サポートされていないコマンド」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

find コマンドの構文は次のとおりです。

バージョン5.0で変更。

db.runCommand( { find: <string>, filter: <document>, sort: <document>, projection: <document>, hint: <document or string>, skip: <int>, limit: <int>, batchSize: <int>, singleBatch: <bool>, comment: <any>, maxTimeMS: <int>, readConcern: <document>, max: <document>, min: <document>, returnKey: <bool>, showRecordId: <bool>, tailable: <bool>, oplogReplay: <bool>, noCursorTimeout: <bool>, awaitData: <bool>, allowPartialResults: <bool>, collation: <document>, allowDiskUse : <bool>, let: <document>, // Added in MongoDB 5.0 querySettings: <document> // Added in MongoDB 9.0 })

注意

MongoDB 4.4 以降、find コマンドは oplogReplay フラグを無視します。設定されている場合、サーバーは下位互換性のためにそれを受け入れますが、無視します。

このコマンドは、次のフィールドを受け入れます。

フィールド
タイプ
説明

find

string

クエリするコレクションまたはビューの名前。

filter

ドキュメント

任意.クエリ述語。指定しない場合、コレクション内のすべてのドキュメントが述語と一致します。

ドキュメント

任意。結果の順序の並び替え指定。

projection

ドキュメント

hint

文字列またはドキュメント

任意.インデックスの仕様。インデックス名をstringとして指定するか、インデックス キー パターンを指定します。指定すると、クエリ システムはヒント指定したインデックスを使用するプランのみを考慮します。

次の例外を除き、コマンドにminまたはmaxフィールドが含まれる場合はhintが必要です。filterが_idフィールド{ _id: <value> }の等価条件である場合、minまたはmaxでhintは必要ありません。

skip

正の整数

任意。スキップするドキュメントの数。デフォルトは 0 です。

limit

non-negative integer

任意。返されるドキュメントの最大数。指定しない場合、デフォルトは制限なしになります。limit の値が 0 の場合、制限を設定しない場合と同等です。

batchSize

non-negative integer

任意。クエリ結果の各バッチで返されることができるドキュメントの最大数。デフォルトでは、find コマンドの初期 batchSize は、101 件のドキュメントまたは 16 メビバイト(MiB)相当のドキュメントのうち、少ない方となります。以降のバッチの最大サイズは 16 MiB です。このオプションは、16 MiB より小さい制限を強制することはできますが、それを超える制限を設定することはできません。設定されている場合、batchSize は batchSize 件のドキュメントまたは 16 MiB 相当のドキュメントのうち、少ない方になります。

batchSize が 0 の場合、カーソルが確立されているものの最初のバッチで返されるドキュメントはないことを表します。

以前のワイヤプロトコル バージョンとは異なり、find コマンドの BatchSize が 1 の場合、カーソルは閉じられません。

後続の getMore 操作のバッチ サイズを指定するには、mongosh で batchSize() を使用します。

singleBatch

ブール値

任意。最初のバッチするの後にカーソルを閉じるかどうかを決定します。デフォルトは false です。

comment

any

任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。

コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。

find コマンドに設定されたコメントは、find カーソルで実行される後続の getMore コマンドに継承されます。

maxTimeMS

non-negative integer

任意。

時間制限をミリ秒単位で指定します。maxTimeMS の値を指定しない場合、操作はタイムアウトしません。値を 0 にすると、デフォルトの無制限動作を明示的に指定します。

MongoDB は、db.killOp() と同じメカニズムを使用して、割り当てられた時間制限を超えた操作を終了します。MongoDB は、指定された割り込みポイントのいずれかでのみ操作を終了します。

linearizable read concern を指定する場合、データを保持するノードの大部分が利用できない場合に備えて、常に maxTimeMS を使用します。maxTimeMS を指定すると、操作が無期限にブロックされることはなく、読み取り保証 (read concern) が満たされない場合は、代わりにエラーが返されます。

maxTimeMS() は noCursorTimeout() とは無関係です。maxTimeMS() はプロセシング時間を制限しますが、noCursorTimeout() はアイドル時間による期限切れを防ぎます。カーソルのアイドル時間は、そのプロセシング時間には寄与しません。

readConcern

ドキュメント

任意。読み取り保証 (read concern) を指定します。

readConcern オプションの構文は、次のとおりです。readConcern: { level: <value> }

次の読み取り保証レベルが利用できます。

  • "local"。これは、プライマリとセカンダリに対する読み取り操作での、デフォルトの読み取り保証レベルです。

  • "available" 。プライマリおよびセカンダリに対する読み取り操作に使用できます。"available" は、プライマリおよびシャーディングされていないセカンダリに対して "local" と同じように動作します。クエリは、インスタンスの最新データを返します。

  • "majority" 。WiredTiger ストレージ エンジンを使用するレプリカセットで使用できます。

  • "linearizable" 。primary の読み取り操作にのみ使用できます。

  • "snapshot"。マルチドキュメントトランザクションおよびマルチドキュメントトランザクション以外の特定の読み取り操作で利用可能です。

読み取り保証 (read concern) のレベルについて詳しくは、「読み取り保証 (read concern) レベル」を参照してください。

getMore コマンドは、元の find コマンドで指定された readConcern レベルを使用します。

max

ドキュメント

任意。特定のインデックスの排他的上限。詳細については、「cursor.max()」を参照してください。

max フィールドを使用するには、指定した filter が _id フィールドの等価条件({ _id: <value> })でない限り、コマンドでも hint を使用する必要があります。

min

ドキュメント

任意。特定のインデックスの包括的下限。詳細については、「cursor.min()」を参照してください。

min フィールドを使用するには、指定した filter が _id フィールドの等価条件({ _id: <value> })でない限り、コマンドでも hint を使用する必要があります。

returnKey

ブール値

任意。trueの場合、結果のドキュメントに含まれるインデックス キーのみを返します。デフォルトは false です。returnKey が true で、find コマンドがインデックスを使用しない場合、返されるドキュメントは空になります。

showRecordId

ブール値

任意。各ドキュメントのレコード識別子を返すかどうかを決定します。true の場合、返されるドキュメントにフィールド $recordId が追加されます。

tailable

ブール値

任意。上限付きコレクションの追尾可能 (tailable) カーソルを返します。

awaitData

ブール値

任意.追尾可能オプションと組み合わせて使用すると、データを返さずに、データの終端でカーソル上の getMore コマンドを一時的にブロックできます。タイムアウト期間が経過すると、find は通常通りにデータを返します。

noCursorTimeout

ブール値

任意。30 分間の非アクティブ期間後に、サーバーが非セッション アイドル カーソルをタイムアウトしないようにします。セッションの一部であるカーソルに対しては無視されます。詳細については、「セッションのアイドル タイムアウト」を参照してください。

ブール値

任意.シャーディングされたコレクションに対するクエリで、クエリされたシャードが 1 つ以上使用できない場合に、コマンド(または後続の getMore コマンド)がエラーではなく部分的な結果を返すことができます。

クエリされたシャードが使用できないために find コマンド(または後続の getMore コマンド)が部分的な結果を返す場合、find の出力には partialResultsReturned インジケーター フィールドが含まれます。クエリされたシャードが最初の find コマンドで使用できるが、後続の getMore コマンドで 1 つ以上のシャードが使用できなくなった場合、シャードが使用できないときに実行される getMore コマンドのみ、出力に partialResultsReturned が含まれます。

collation

ドキュメント

任意。

任意。操作に使用する照合を指定します。

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

照合オプションの構文は次のとおりです。

collation: { locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> }

照合を指定する場合、locale フィールドは必須ですが、その他の照合フィールドはすべて任意です。フィールドの説明については、照合ドキュメントを参照してください。

照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合(db.createCollection() を参照)には、コレクションの照合が使用されます。

コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。

1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。

ブール値

任意。

このオプションを使用して、特定のクエリの allowDiskUseByDefault をオーバーライドできます。このオプションは下記のいずれかに使用できます。

  • デフォルトでディスクの使用が許可されているシステムで、ディスクの使用を禁止する。

  • デフォルトでディスクの使用が禁止されているシステムで、ディスクの使用を許可する。

MongoDB 6.0 以降では、 allowDiskUseByDefault が true に設定されており、かつパイプライン実行ステージのために 100 MB を超えるメモリがサーバーに必要な場合、クエリで { allowDiskUse: false } が指定されていない限り、MongoDB では一時ファイルが自動的にディスクに書き込まれます。

詳細については、allowDiskUseByDefault を参照してください。

allowDiskUse は、MongoDBがインデックスを使用して指定されたsortを満たすことができる場合、またはインメモリソートに必要なメモリが100メガバイト未満の場合は、効果がありません。

allowDiskUse の詳細なドキュメントについては、「cursor.allowDiskUse()」を参照してください。

大規模なインメモリソートのメモリ制限についての詳細は、「ソートとインデックスの使用」をご覧ください。

ドキュメント

任意。

変数のリストを含むドキュメントを指定します。これにより、変数をクエリテキストから分離することで、コマンドの読みやすさを向上させることができます。

ドキュメントの構文は次のとおりです。

{ <variable_name_1>: <expression_1>, ..., <variable_name_n>: <expression_n>}

変数は式によって返された値に設定され、その後は変更できません。

コマンド内の変数の値にアクセスするには、二重ドル記号の接頭辞($$)を $$<variable_name> 形式にした変数名とともに使用します。たとえば次のとおりです。$$targetTotal

結果のフィルタリングに変数を使用するには、$expr 演算子内の変数にアクセスする必要があります。

let と変数を使用した完全な例については、「let における変数の使用」を参照してください。

バージョン 5.0 の新機能。

querySettings

ドキュメント

任意。このコマンドの実行にのみ適用されるクエリ設定。querySettingsドキュメントは、次のフィールドを受け入れます。

  • indexHints

  • queryFramework

  • reject

  • comment

  • queryKnobs

  • maxTimeMS

これらのフィールドの説明については、コマンドフィールドを参照してください。

MongoDB は、これらの設定をクラスター上に保存しません。また、同じクエリシェイプを持つ他のクエリには適用されません。クエリシェイプに対して持続するクエリ設定を設定するには、setQuerySettings. を使用します。

MongoDBは、コマンドで渡された設定と、同じクエリシェイプに対してクラスターに保存されているクエリ設定を組み合わせます。両方の設定で同じフィールドが指定されている場合、保存されているクラスター設定が優先されます。

バージョン9.0の新機能。

このコマンドは、カーソル ID とドキュメントの最初のバッチするを含むカーソル情報を含むドキュメントを返します。次の例は、シャーディングされたコレクションに対して実行する場合の出力を示します。

{ "cursor" : { "firstBatch" : [ { "_id" : ObjectId("5e8e2ca217b5324fa9847435"), "zipcode" : "20001", "x" : 1 }, { "_id" : ObjectId("5e8e2ca517b5324fa9847436"), "zipcode" : "30001", "x" : 1 } ], "partialResultsReturned" : true, "id" : Long("668860441858272439"), "ns" : "test.contacts" }, "ok" : 1, "operationTime" : Timestamp(1586380205, 1), "$clusterTime" : { "clusterTime" : Timestamp(1586380225, 2), "signature" : { "hash" : BinData(0,"aI/jWsUVUSkMw8id+A+AVVTQh9Y="), "keyId" : Long("6813364731999420435") } }}
フィールド
説明

cursor

カーソル id やドキュメントの firstBatch などのカーソル情報が含まれます。

クエリされたシャードが使用できないために、シャーディングされたコレクションに対する操作で部分的な結果が返される場合、cursor ドキュメントには partialResultsReturned フィールドが含まれます。クエリされたシャードが使用できないためにエラーではなく部分的な結果を返すには、find を allowPartialResults true に設定してコマンドを実行する必要があります。allowPartialResults を参照してください。

クエリされたシャードが最初は find コマンドで使用可能であったが、1 つ以上のシャードが後続の getMore コマンドで使用できなくなった場合、クエリされたシャードが使用できないときに実行される getMore コマンドにのみ、出力に partialResultsReturned フラグが立てられます。

"ok"

コマンドが成功(1)したか失敗(0)したかを示します。

前述の find 固有のフィールドに加えて、db.runCommand() にはレプリカセットとシャーディングされたクラスターに関する次の情報が含まれています。

  • $clusterTime

  • operationTime

詳細については、「db.runCommand() 」の結果を参照してください。

生のコマンド応答が必要ない場合は、db.collection.find() または db.collection.findOne()ヘルパーメソッドを使用します。

find() 操作では、通常、次の操作順序が使用されます。

  • 一致

  • sort

  • スキップ

  • limit

  • プロジェクト

MongoDBは、上記の操作順序を維持しつつクエリ パフォーマンスを最適化するために、コンポーネントを別の順序で実行する場合があります。

MongoDB 5.1 以降、無効な $regex options オプションが無視されなくなりました。この変更により、$regex options は、aggregate コマンドおよびプロジェクション クエリでの $regex の使用との一貫性が向上します。

セッション内で作成されたカーソルの場合、セッション外で getMore を呼び出すことはできません。

同様に、セッション外で作成されたカーソルの場合、セッション内で getMore を呼び出すことはできません。

MongoDB ドライバーとmongosh では、確認されていない書込み操作を除くすべての操作がサーバー セッションに関連付けられます。セッションに明示的に関連付けられていない操作(つまり Mongo.startSession()を使用するもの)の場合、MongoDB ドライバーとmongoshによって暗黙的なセッションが作成され、それが操作に関連付けられます。

セッションが30分以上アイドル状態になると、MongoDBサーバーはそのセッションを期限切れとしてマークし、いつでも閉じる可能性があります。MongoDB サーバーでセッションが閉じると、そのセッションで進行中の操作や開いているカーソルもすべて終了します。これには、noCursorTimeout() や 30 分を超える maxTimeMS() で構成されたカーソルも含まれます。

カーソルが 30 分以上アイドル状態になる可能性がある場合は、Mongo.startSession() を使用して明示的なセッション内で操作を発行します。refreshSessions コマンドを使用してセッションを定期的に更新します。詳細については、「セッションアイドルタイムアウト」を参照してください。

find は分散トランザクション内で使用できます。

  • トランザクションの外部で作成されたカーソルの場合、トランザクション内で getMore を呼び出せません。

  • トランザクション内で作成されたカーソルの場合、トランザクション外で getMore を呼び出せません。

重要

ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。

トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。

操作が完了する前にfindを発行したクライアントが切断された場合、MongoDB はfindをkillOpを使用して終了対象としてマークします。

Stable API V1 を使用する場合、Stable API V1 では使用できない次のフィールドを除き、すべての find コマンドフィールドがサポートされます。

  • awaitData

  • max

  • min

  • noCursorTimeout

  • returnKey

  • showRecordId

  • tailable

MongoDB 6.0 以降、インデックス フィルターは、以前はplanCacheSetFilter コマンドを使用して設定されていた照合を使用します。

MongoDB 8.0以降では、インデックス フィルターを追加する 代わりに、 クエリ設定を使用します 。 インデックス フィルターは MongoDB 8.0以降非推奨です。

クエリ設定は、インデックス フィルターよりも多くの機能を持ちます。 また、インデックス フィルターは永続的ではなく、すべてのクラスター ノードに対してインデックス フィルターを簡単に作成することはできません。 クエリ設定を追加して例を探すには、 setQuerySettingsを参照してください。

MongoDB7.3 以降、 オプションとsingleBatch: true batchSize: 1オプションを持つビューで find コマンドを使用すると、カーソルは返されなくなります。MongoDB の以前のバージョンでは、単一のバッチオプションをtrueに設定しても、これらの検索クエリはカーソルを返していました。

バージョン8.0の新機能。

クエリ設定を使用して、インデックスヒント、操作拒否フィルター、その他のフィールドを設定できます。設定はクラスター全体のクエリシェイプに適用されます。クラスターは、シャットダウン後も設定を保持します。

クエリオプティマイザは、クエリプランニング中の追加入力としてクエリ設定を使用します。これは、クエリを実行するために選択されたプランに影響します。クエリ設定を使用してクエリシェイプをブロックすることもできます。

クエリ設定を追加して例を調べるには、setQuerySettings を参照してください。

find、distinct、および aggregate コマンドのクエリ設定を追加できます。

クエリ設定にはより多くの機能があり、廃止されたインデックスフィルターよりも優先されます。

クエリ設定を削除するには、 removeQuerySettingsを使用します。 クエリ設定を取得するには、集計パイプラインの$querySettingsステージを使用します。

このページの例では、sample_mflix データセット のデータを使用しています。自己管理型 MongoDB 配置にこのデータセットをロードする方法の詳細については、「サンプル データセットのロード」を参照してください。サンプル データベースに何らかの変更を加えた場合は、今ページの例を実行するには、データベースを削除して再作成する必要がある可能性があります。

次のコマンドは、IMDB 評価が 9 以上で、ドラマ ジャンルの映画の movies コレクションをクエリします。コマンドには、title フィールド、imdb.rating フィールド、year フィールドのみを返す projection が含まれています。

このコマンドは、結果を title でソートし、出力を 5 ドキュメントに制限します。

db.runCommand( { find: "movies", filter: { "imdb.rating": { $gte: 9 }, genres: "Drama" }, projection: { title: 1, "imdb.rating": 1, year: 1 }, sort: { title: 1 }, limit: 5 })

デフォルトの読み取り保証 (read concern) レベル "local" を無効にするには、readConcern オプションを使用します。

次のコード例では、レプリカセットの movies コレクションに対してこれらの操作を実行します。

  • IMDB 評価が 5 未満の映画を検索

  • 結果を 5 ドキュメントに制限します

  • は、 MongoDB が過半数のノードに書き込んだデータの最新のコピーを読み取るために、 の 読み取り保証 (read concern) "majority"を指定します。

db.runCommand( { find: "movies", filter: { "imdb.rating": { $lt: 5 } }, limit: 5, readConcern: { level: "majority" } })

読み取り保証のレベルを問わず、ノード上の最新データにシステム内のデータの最新バージョンが反映されていない場合があります。

getMore コマンドは、元の find コマンドで指定された readConcern レベルを使用します。

cursor.readConcern() メソッドを使用して、mongosh メソッドの db.collection.find() に readConcern を指定できます。

db.movies.find( { "imdb.rating": { $lt: 2 } } ).readConcern("majority")

読み取り保証(read concern)の詳細については、「読み取り保証(read concern)」を参照してください。

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

この例では、次の操作を実行します。

  • タイトルが Les Misérables で、日付が 2012 の映画を検索します

  • 一致するドキュメントを でソートします title

  • フランス語の照合(locale: "fr")とアクセントを区別しない一致(strength: 1)で find を実行します。

db.runCommand( { find: "movies", filter: { title: "les misérables", year: 2012 }, sort: { title: 1 }, collation: { locale: "fr", strength: 1 } })

mongosh は、db.collection.find() 操作の照合を指定するために cursor.collation() を提供します。

次の例では、 targetTitle 変数を定義し、それを使用して titleフィールドと変数の値を比較して映画を検索します。この例では、「The GodFAther」というタイトルのすべての映画を検索します。

db.movies.runCommand( { find: db.movies.getName(), filter: { $expr: { $eq: [ "$title", "$$targetTitle" ] } }, let : { targetTitle: "The Godfather" }} )
このページを評価