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以上

インデックス スキャン

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

重要

クエリプランが別のインデックスを使用するように変更された場合、このメソッドは別のドキュメントを返すことがあります。ユースケースで特定のレコードを一貫して選択する必要がある場合は、options ドキュメントを使用してソートを指定する必要があります。options ドキュメントで findOne() を使用する方法の詳細については、を参照してください。

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 はクラウドでの MongoDB 配置のための完全管理サービスです

注意

このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。

  • 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コレクション内のドキュメントが検索され、titlegenresimdb フィールドのみが返されます。

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 演算子内で変数にアクセスする必要があります。

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

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