35.7.2.3. update


コレクションの 1 つまたは複数のレコードを更新します。フィルタークエリーおよび更新ルールが必要です。

MongoDBConstants.CRITERIA ヘッダーを Bson として使用してフィルターを定義し、更新ルールを Body で Bson として定義できます。

注記

補完後の更新
は、MongoDBConstants.CRITERIA ヘッダーを Bson として使用して更新を実行する前に mongodb のクエリーを行いながら、集約ストラテジーで補完パターンを使用し、mongodb 更新を適用する場合は、集計時に生成される Camel エクスチェンジからフィルターを削除する必要がある点に注意してください。集約中にこのヘッダーを削除したり、mongodb プロデューサーエンドポイントに Camel エクスチェンジを送信する前に MongoDBConstants.CRITERIA ヘッダーを再定義しない場合、mongodb の更新中に無効な camel エクスチェンジペイロードで終了する可能性があります。

2 つ目の方法では、2 つの要素が含まれる IN メッセージボディーとして List<Bson> が必要になります。

  • 要素 1 (インデックス 0)(インデックス 0)フィルタークエリー NORMAL は、通常のクエリーオブジェクトと同様に、影響を受けるオブジェクトを決定します。
  • 要素 2 (インデックス 1)は、一致したオブジェクトの更新方法、更新方法に関するルールです。MongoDB からの 修飾子操作 はすべてサポートされます。
注記

Multiupdates
デフォルトでは、MongoDB は複数のオブジェクトがフィルタークエリーと一致する場合でも 1 つのオブジェクトのみを更新します。一致する すべて のレコードを更新するよう MongoDB に指示するには、CamelMongoDbMultiUpdate IN メッセージヘッダーを true に設定します。

キーの CamelMongoDbRecordsAffected のあるヘッダーは、更新されたレコードの数( WriteResult.getN ()からコピー)を含むレコードの数とともに(MongoDbConstants.RECORDS_AFFECTED 定数)を返します。

次の IN メッセージヘッダーをサポートします。

Expand
ヘッダーのキークイック定数説明 (MongoDB API ドキュメントから抜粋)想定されるタイプ

CamelMongoDbMultiUpdate

MongoDbConstants.MULTIUPDATE

一致するすべてのオブジェクトに更新を適用する必要がある場合。http://www.mongodb.org/display/DOCS/Atomic+Operations を参照してください。

boolean/Boolean

CamelMongoDbUpsert

MongoDbConstants.UPSERT

データベースが存在しない場合には、要素を作成する必要がある

boolean/Boolean

たとえば、以下は "scientist" フィールドの値を "Darwin" に設定することにより、filterField フィールドが true である すべて のレコードを更新します。

// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update");
List<Bson> body = new ArrayList<>();
Bson filterField = Filters.eq("filterField", true);
body.add(filterField);
BsonDocument updateObj = new BsonDocument().append("$set", new BsonDocument("scientist", new BsonString("Darwin")));
body.add(updateObj);
Object result = template.requestBodyAndHeader("direct:update", body, MongoDbConstants.MULTIUPDATE, true);
Copy to Clipboard Toggle word wrap
// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update");
Maps<String, Object> headers = new HashMap<>(2);
headers.add(MongoDbConstants.MULTIUPDATE, true);
headers.add(MongoDbConstants.FIELDS_FILTER, Filters.eq("filterField", true));
String updateObj = Updates.set("scientist", "Darwin");;
Object result = template.requestBodyAndHeaders("direct:update", updateObj, headers);
Copy to Clipboard Toggle word wrap
// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update");
String updateObj = "[{\"filterField\": true}, {\"$set\", {\"scientist\", \"Darwin\"}}]";
Object result = template.requestBodyAndHeader("direct:update", updateObj, MongoDbConstants.MULTIUPDATE, true);
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat