Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

find

項目一覧

  • 定義
  • 互換性
  • 構文
  • 動作
find

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

Tip

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

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

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

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

重要

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

  • 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
}
)

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

フィールド
タイプ
説明
find
string
クエリするコレクションまたはビューの名前。
filter
ドキュメント
任意。クエリ述語。指定しない場合は、コレクション内のすべてのドキュメントがその述語と一致します。
ドキュメント
任意。結果の順序の並び替え指定。
projection
ドキュメント

任意。返される文書に含めるフィールドを決定するためのプロジェクション仕様。「プロジェクション」および「プロジェクション演算子」を参照してください。

ビューに対するfind()操作では、次のクエリ 演算子およびプロジェクション 演算子をサポートしていません。

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

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

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

skip
正の整数
任意。スキップするドキュメントの数。デフォルトは 0 です。
limit
Non-negative integer
任意。返されるドキュメントの最大数。指定しない場合、デフォルトは制限なしになります。limit の値が 0 の場合、制限を設定しない場合と同等です。
batchSize
non-negative integer

任意。最初のバッチで返すドキュメントの数。デフォルトは 101 です。BatchSize が 0 の場合、カーソルは作成されますが、最初のバッチではドキュメントは返されません。

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

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) が満たされない場合は、代わりにエラーが返されます。

readConcern
ドキュメント

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

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

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

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

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

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

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

読み取り保証 (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 以降では、 allowDiskUseByDefaulttrue に設定されており、かつパイプライン実行ステージのために 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 で追加

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

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

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

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

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

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

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

  • $clusterTime

  • operationTime

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

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 サイズ制限など)については、「本番環境での考慮事項」も参照してください。

MongoDB 4.2以降では、 findを発行したクライアントが操作の完了前に切断した場合、MongoDB は killOp を使用してfindを終了対象としてマークし

Stable API V1 を使用する場合、次の find コマンド フィールドはサポートされません。

  • awaitData

  • max

  • min

  • noCursorTimeout

  • oplogReplay

  • 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 を参照してください。

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

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

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

次のコマンドは、rating フィールドと cuisine フィールドでフィルタリングする find コマンドを実行します。このコマンドには、一致するドキュメント内の _id フィールド、name フィールド、rating フィールド、および address フィールドのみを返す projection が含まれています。

このコマンドは、結果セット内のドキュメントを name フィールドでソートし、結果セットを 5 つのドキュメントに制限します。

db.runCommand(
{
find: "restaurants",
filter: { rating: { $gte: 9 }, cuisine: "italian" },
projection: { name: 1, rating: 1, address: 1 },
sort: { name: 1 },
limit: 5
}
)

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

レプリカセットに対する次の操作では、大多数のノードに書き込まれたことが確認されたデータの最新のコピーを読み取るために、読み取り保証"majority" を指定します。

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

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

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

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

db.restaurants.find( { rating: { $lt: 5 } } ).readConcern("majority")

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

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

次の操作は、指定された照合で find コマンドを実行します。

db.runCommand(
{
find: "myColl",
filter: { category: "cafe", status: "a" },
sort: { category: 1 },
collation: { locale: "fr", strength: 1 }
}
)

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

バージョン 5.0 で追加

コマンド内の他の場所からアクセスできる変数を定義するには let オプションを使用します。

注意

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

コレクション cakeFlavors を以下ように作成します。

db.cakeFlavors.insertMany( [
{ _id: 1, flavor: "chocolate" },
{ _id: 2, flavor: "strawberry" },
{ _id: 3, flavor: "cherry" }
] )

次の例では、lettargetFlavor 変数を定義し、その変数を使用してチョコレート ケーキの風味を検索します。

db.cakeFlavors.runCommand( {
find: db.cakeFlavors.getName(),
filter: { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } },
let : { targetFlavor: "chocolate" }
} )

戻る

削除