findOne() (単一ドキュメントのクエリ)
最終更新:2026-10-09
findOne() (単一ドキュメントのクエリ)
findOne() はフィルタに一致する最初のドキュメントを、カーソルではなくドキュメントとして直接返します。例: `db.users.findOne({ name: 'Alice' })`。複数一致する場合は自然順序で最初のものを返し、一致しない場合は null を返します。カーソルの反復をスキップするため、_id やユーザー名などの一意フィールドでの検索に最適です。
| カテゴリ | 読み取り |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.findOne(<filter>, <projection>)
⚙️ パラメータ
| フィルター条件 | 述語オブジェクト。クエリ演算子をサポートします。 |
|---|---|
| 射影 | 任意。返すフィールドを制御します: 1=含める / 0=除外する。 |
戻り値:最初にマッチしたドキュメント。何もマッチしない場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// findOne: _id でユーザーを検索する
const user = db.users.findOne(
{ _id: ObjectId('64c8a1b20000000000000001') },
{ name: 1, age: 1, _id: 0 }
)
user
出力:
{ name: 'Alice', age: 21 }
📌 注意事項
- 最初の一致のみが返される。自然順序は安定しているとは限らない
- 一致なしでは null を返す。if (doc) でガードする
- 単一ドキュメントの読み取りでは find().limit(1) よりすっきりしている
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
QfindOne は find().limit(1) と同じですか?
A似ていますが、findOne() はドキュメントを直接返すのに対し、find() は反復用のカーソルを返します。一意フィールドの検索では findOne() が好ましいです。
QfindOne は見つからない場合に何を返しますか?
Aエラーを投げず null を返します。通常は if (doc) { ... } のように使います。
QfindOne で一部のフィールドだけ返せますか?
Aできます。第2引数にプロジェクションを渡します。例: {name: 1}