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

db.コレクション.findOne()(mongoshメソッド)

MongoDB とドライバー

このページでは、mongosh メソッドのドキュメントについて記載しています。MongoDB ドライバーで同等のメソッドを確認するには、ご使用のプログラミング言語の対応するページを参照してください。
db.collection.findOne(query, projection, options)

コレクションまたはビューで指定されたクエリ条件を満たす 1 つのドキュメントを返します。

返されるドキュメントは、クエリ条件に一致するドキュメントの数と、使用するクエリプランによって異なる場合があります。

一致するドキュメントの数
クエリプラン
結果

0

Any

このメソッドが返すのは null

1

Any

メソッドは、指定されたクエリ条件を満たすドキュメントを返します。

2以上

コレクションスキャン

このメソッドは、自然な順序に従って最初のドキュメントを返します。上限付きコレクションにおける自然な順序は、挿入順序と同じです。

2以上

インデックス スキャン

このメソッドは、インデックスから検索された最初のドキュメントを返します。

重要

If the query plan changes to use a different index, the method may return a different document. If your use case requires that a particular record is chosen consistently, you must use the options document to specify a sort. For details on using findOne() with an options document, see the example.

If you specify a projection parameter, findOne() returns a document that only contains the projection fields. The _id field is always included unless you explicitly exclude it.

注意

find()メソッドと似ていますが、findOne()はカーソルではなくドキュメントを返します。

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

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

注意

This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.

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

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

db.collection.findOne() の形式は次のとおりです。

db.collection.findOne( <query>, <projection>, <options> )

db.collection.findOne() は以下のパラメーターを取ります。

Parameter
タイプ
説明

query

ドキュメント

任意。クエリ演算子を使用してクエリの選択条件を指定します。

projection

ドキュメント

Optional. Specifies the fields to return using projection operators. Omit this parameter to return all fields in the matching document. For details, see Projection.

options

ドキュメント

任意。クエリの追加オプションを指定します。これらのオプションは、クエリの動作と結果が返される方法を変更します。利用可能なオプションを確認するには、FindOptionsを参照してください。

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

重要

言語の整合性

find() と findAndModify() プロジェクションを集計の $project ステージと一貫性を持たせるために、次の条件が課されます。

projection パラメーターにより、一致するドキュメントで返されるフィールドが決定されます。projection パラメーターは以下の形式のドキュメントです。

{ field1: <value>, field2: <value> ... }
プロジェクション
説明

<field>: <1 or true>

フィールドを包含することを指定します。プロジェクションの値としてゼロ以外の整数を指定した場合、その値を true として処理します。

<field>: <0 or false>

フィールドの除外を指定します。

"<field>.$": <1 or true>

$ 配列プロジェクション 演算子を使用して、配列フィールドのクエリ条件に一致する最初の要素を返します。プロジェクションの値としてゼロ以外の整数を指定した場合、その値を true として処理します。

ビューには使用できません。

<field>: <array projection>

配列プロジェクション 演算子($elemMatch、$slice)を使用して、含める配列要素を指定します。

ビューには使用できません。

<field>: <$meta expression>

$meta 演算子式を使用して、使用可能な per-document metadataを含めることを指定します。

ビューには使用できません。

<field>: <aggregation expression>

プロジェクションを行ったフィールドの値を指定します。

集計式と構文の使用(リテラルと集計変数の使用を含む)では、新しいフィールドをプロジェクションしたり、既存のフィールドを新しい値でプロジェクションしたりできます。

  • プロジェクションの値として数値でもブール値でもないリテラル(例えば、文字列リテラルや配列、演算子式)を指定すると、フィールドは新しい値でプロジェクションされます。次に例を示します。

    • { field: [ 1, 2, 3, "$someExistingField" ] }

    • { field: "New String Value" }

    • { field: { status: "Active", total: { $sum: "$existingArray" } } }

  • フィールドにリテラル値をプロジェクションするには、$literal 集計式を使用します。次に例を示します。

    • { field: { $literal: 5 } }

    • { field: { $literal: true } }

    • { field: { $literal: { fieldWithValue0: 0, fieldWithValue1: 1 } } }

注意

You can specify projection in two ways for find() and findOne():

  • projection パラメータの設定

  • options パラメータを projection に設定する

両方のパラメーターを指定する場合は、projection パラメーターが優先されます。options.projection を使用するには、projection パラメータを null または undefined に設定します。

埋め込みドキュメント内のフィールドの場合は、次のいずれかを使用してフィールドを指定できます。

  • ドット表記の場合は次のようになります。 "field.nestedfield": <value>

  • ネストされた形式の例 { field: { nestedfield: <value> } }

_id フィールドは、プロジェクションで _id: 0 を明示的に指定して抑制しない限り、返されるドキュメントにデフォルトで含まれます。

projection には、 _id フィールドを除いて、包含指定と除外指定の両方を含めることはできません。

  • フィールドを明示的に含めるプロジェクションでは、_id フィールドだけが明示的に除外できる唯一のフィールドです。

  • フィールドを明示的に除外するプロジェクションでは、_id フィールドが明示的に包含できる唯一のフィールドですが、デフォルトで _id フィールドが含まれます。

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

次の操作は、sample_mflixデータベース内の moviesコレクションから 1 つのドキュメントを返します。

db.movies.findOne()

次の操作と、moviesコレクションから最初に一致するドキュメントが返されます。titleフィールドが文字「T」で始まる、 または yearフィールドが 1950 より小さい。

db.movies.findOne(
{
$or: [
{ title: /^T/ },
{ year: { $lt: 1950 } }
]
}
)

projection は返すフィールドを指定するパラメーターです。このパラメーターに含まれるのは、包含指定と除外指定のいずれかであり、除外指定の対象が _id フィールドでない限り、両方を指定することはできません。

次の操作を実行すると、moviesコレクション内のドキュメントが検索され、title、genres、imdb フィールドのみが返されます。

db.movies.findOne(
{ },
{ title: 1, genres: 1, imdb: 1 }
)

次の操作では、cast 配列に "Al Pacino" が含まれる moviesコレクション内のドキュメントが返されます。プロジェクションでは、_idフィールド、imdb埋め込みドキュメント内の votesフィールド、および fullplotフィールドを除くすべてのフィールドが返されます。

db.movies.findOne(
{ cast: 'Al Pacino' },
{ _id: 0, 'imdb.votes': 0, fullplot: 0 }
)

次の操作では、sort オプションを使用して、ソートされた movies コレクションから最初に一致するドキュメントを返します。この例では、コレクションは year の昇順でソートされています。

db.movies.findOne(
{ },
{ },
{ sort: { year: 1 } }
)

単一ドキュメントが返されるため、カーソル メソッドは findOne() の結果に適用できません。ドキュメントに直接アクセスできます。

var myDocument = db.movies.findOne();
if (myDocument) {
var myTitle = myDocument.title;
print(myTitle);
}

クエリオプションを指定してクエリの動作を変更することで、結果が返される方法を指定できます。

たとえば、 findOne メソッド内の他の場所からアクセスできる変数を定義するには、 let オプションを使用します。変数を使用して結果をフィルターするには、$expr 演算子内で変数にアクセスする必要があります。

次の例では、 let で targetTitle 変数を定義し、その変数を使用して "The Godfather" というタイトルの映画を検索します。

db.movies.findOne(
{ $expr: { $eq: [ "$title", "$$targetTitle" ] } },
{ _id: 0, title: 1, year: 1 },
{ let : { targetTitle: "The Godfather" } }
)
このページを評価