ドキュメントの置換
Overview
このガイドでは、 MongoDBコレクション内のドキュメントを置き換える方法を学習できます。置換操作は、フィールドと値を指定して、コレクションの 1 つのドキュメントを置き換えます。
1 つの方法を置き換え
置換操作により、コレクションの 1 つのドキュメントが置き換えられます。 置換は、クエリフィルターが一致するドキュメントと置換ドキュメントの間で発生します。
replaceOne() メソッドは、一致するドキュメント内の既存のフィールドと値をすべて削除し( _id
フィールドを除く)、それを置換ドキュメントで置き換えます。
次のように、 MongoCollection
インスタンスでreplaceOne()
メソッドを呼び出すことができます。
collection.replaceOne(<query>, <replacement>);
操作パラメータの置換
replaceOne()
メソッドには次のパラメーターがあります。
query
は、コレクション内の置き換えドキュメントと一致するための 条件でクエリフィルター を指定します。replacement
は、一致したドキュメントを置き換える新しいDocument
オブジェクトのフィールドと値を指定します。(任意)
replaceOptions
は、ドライバーが置換操作を実行する方法をカスタマイズするために設定できるオプションを指定します。 このタイプの詳細については、 ReplaceOptions のAPIドキュメントを参照してください。
1 つの例を置き換え
この例では、塗料店で 5 色の塗料を販売しています。 paint_inventory
コレクションは現在の在庫を表します。
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 3, "color": "yellow", "qty": 0 } { "_id": 4, "color": "green", "qty": 6 } { "_id": 5, "color": "pink", "qty": 0 }
塗料店では、在庫を再度更新する必要があることが認識されています。 ページ内を表示
在庫をアップデートするには、以下を指定してreplaceOne()
メソッドを呼び出します。
color
が「pink」であるドキュメントに一致するクエリフィルターcolor
が "Orange" で、qty
が " 25である置換ドキュメント
Bson filter = Filters.eq("color", "pink"); Document document = new Document("color", "orange").append("qty", 25); // Replaces the first document that matches the filter with a new document UpdateResult result = collection.replaceOne(filter, document); // Prints the number of matched and modified documents System.out.println("Matched document count: " + result.getMatchedCount()); System.out.println("Modified document count: " + result.getModifiedCount());
上記のコードの出力は、次のようになります。
Matched document count: 1 Modified document count: 1
以下は更新されたドキュメントを示しています。
{ "_id": 5, "color": "orange", "qty": 25 }
複数のドキュメントが replaceOne()
メソッドで指定されたクエリフィルターに一致する場合は、最初の結果が置き換えられます。次のコードに示すように、サーバーが置換操作を実行する前に、一致したドキュメントに順序を適用するために、ReplaceOptions
インスタンスで並べ替えを指定できます。
ReplaceOptions options = ReplaceOptions.sort(ascending("qty")); UpdateResult result = collection.replaceOne(filter, document, options);
置換操作でクエリクエリフィルターに一致するドキュメントがない場合、replaceOne()
はコレクション内のドキュメントに変更を加えません。一致するドキュメントがない場合に、ドキュメントを置き換える代わりに新しいドキュメントを挿入する方法については、アップサートガイドをご覧ください。