Docs Menu
Docs Home
/ / /
Node.js ドライバー
/ /

複合演算子

項目一覧

  • Overview
  • 組み込みメソッド

ほとんどのデータベースリクエストでは、データベースからデータを読み取るか、データベースにデータを書き込みます。 ただし、データの読み取りと書き込みを 1 回の操作で必要とする場合もあります。

複合操作は、読み取り操作と書込み (write) 操作を 1 つのアトミックなステートメントで結合するため、読み取りとその後の書込み (write) の間にデータが変更される可能性はありません。

各操作を個別に実行すると、別のリクエストによって読み取り操作と書込み操作の間にデータが変更される可能性があります。 これらのデータ変更は操作の成功を妨げるものではありませんが、エラー処理がより困難になる可能性があります。 アプリケーションが プロセスのいずれかの段階で潜在的なエラーを処理すると、脆弱になり、テストが困難になります。

Node.js ドライバーは、複合操作を実行するための次のメソッドを提供します。

  • FindOneAndDelete()

  • findOneAndUpdate()

  • FindOneAndReplace()

これらのメソッドは、構成可能な並べ替えプロジェクションオプションを持つ任意の optionsオブジェクトを受け入れます。

これらの各メソッドの戻り値の型を指定するために、 includeResultMetadataオプションを設定することもできます。 このオプションの詳細については、このガイドの「 includeResultMetadata オプション」セクションを参照してください。

findOneAndUpdate()メソッドとfindOneAndDelete()メソッドはreturnDocument設定を受け取ります。これは、変更されたドキュメントの更新前バージョンまたは更新後のバージョンがメソッドで返されるか、更新後のバージョンが返されるかを指定します。

includeResultMetadataオプションによって、複合メソッドの戻り値の型が決まります。

この設定のデフォルトはfalseです。つまり、各メソッドは一致したドキュメントを返します。 一致するドキュメントがない場合、各 メソッドはnullを返します。 includeResultMetadatatrueに設定すると、メソッドは見つかったドキュメントとメタデータを含むModifyResultタイプを返します。

コレクションに次のドキュメントのみが含まれているとします。

{ _id: 1, x: "on" }

次の表は、 includeResultMetadataオプションの値によってfindOneAndDelete()メソッドの戻り値の型がどのように変化するかを示しています。

オプションの値
構文と出力
デフォルト: false

一致したドキュメント

await coll.findOneAndDelete({ x: "on" });
{ _id: 1, x: 'on' }

一致するドキュメントはありません

await coll.findOneAndDelete({ x: "off" });
null
true
await coll.findOneAndDelete({ x: "on" }, { includeResultMetadata: true });
{ lastErrorObject: { n: 1 }, value: { _id: 1, x: 'on' }, ok: 1, ... }

戻る

クエリを指定する