複合演算子
Overview
ほとんどのデータベースリクエストでは、データベースからデータを読み取るか、データベースにデータを書き込みます。 ただし、データの読み取りと書き込みを 1 回の操作で必要とする場合もあります。
複合操作は、読み取り操作と書込み (write) 操作を 1 つのアトミックなステートメントで結合するため、読み取りとその後の書込み (write) の間にデータが変更される可能性はありません。
各操作を個別に実行すると、別のリクエストによって読み取り操作と書込み操作の間にデータが変更される可能性があります。 これらのデータ変更は操作の成功を妨げるものではありませんが、エラー処理がより困難になる可能性があります。 アプリケーションが プロセスのいずれかの段階で潜在的なエラーを処理すると、脆弱になり、テストが困難になります。
組み込みメソッド
Node.js ドライバーは、複合操作を実行するための次のメソッドを提供します。
これらのメソッドは、構成可能な並べ替えとプロジェクションオプションを持つ任意の options
オブジェクトを受け入れます。
これらの各メソッドの戻り値の型を指定するために、 includeResultMetadata
オプションを設定することもできます。 このオプションの詳細については、このガイドの「 includeResultMetadata オプション」セクションを参照してください。
findOneAndUpdate()
メソッドとfindOneAndDelete()
メソッドはreturnDocument
設定を受け取ります。これは、変更されたドキュメントの更新前バージョンまたは更新後のバージョンがメソッドで返されるか、更新後のバージョンが返されるかを指定します。
includeResultMetadata オプション
includeResultMetadata
オプションによって、複合メソッドの戻り値の型が決まります。
この設定のデフォルトはfalse
です。つまり、各メソッドは一致したドキュメントを返します。 一致するドキュメントがない場合、各 メソッドはnull
を返します。 includeResultMetadata
をtrue
に設定すると、メソッドは見つかったドキュメントとメタデータを含むModifyResult
タイプを返します。
コレクションに次のドキュメントのみが含まれているとします。
{ _id: 1, x: "on" }
次の表は、 includeResultMetadata
オプションの値によってfindOneAndDelete()
メソッドの戻り値の型がどのように変化するかを示しています。
オプションの値 | 構文と出力 | ||||
---|---|---|---|---|---|
デフォルト: | 一致したドキュメント
一致するドキュメントはありません
| ||||
|
|