218.5.2.3. 更新
コレクションで 1 つまたは複数のレコードを更新します。フィルタークエリーと更新ルールが必要です。
MongoDBConstants.CRITERIA ヘッダーを Bson として定義し、更新ルールを Body に Bson として定義できます。
2 つ目の方法は、完全 2 つの要素が含まれる IN メッセージボディーとして List<Bson> を必要とする方法です。
- 要素 1(インデックス 0)pid フィルタークエリー gitops は、通常のクエリーオブジェクトと同じように、影響を受けるオブジェクトを決定します。
- 要素 2(インデックス 1)pid 更新ルールは、一致したオブジェクトの更新方法。MongoDB の すべての修飾子操作 がサポートされます。
Multiupdates。デフォルトでは、MongoDB は複数のオブジェクトがフィルタークエリーに一致する場合でも 1 つのオブジェクトのみを更新します。MongoDB に対して一致する すべて のレコードを更新するように指示するには、CamelMongoDbMultiUpdate IN メッセージヘッダーを true に設定します。
CamelMongoDbRecordsAffected キーのあるヘッダー(MongoDbConstants.RECORDS_AFFECTED 定数)と更新されたレコード( WriteResult.getN()から派生)を返します。
以下の IN メッセージヘッダーをサポートします。
| ヘッダーキー | クイック定数 | 説明(MongoDB API ドキュメントから抽出) | 想定されるタイプ |
|---|---|---|---|
|
|
| If the update to apply all objects matching.See http://www.mongodb.org/display/DOCS/Atomic+Operations | boolean/Boolean |
|
|
| 要素が存在しない場合にデータベースが要素を作成するべきかどうか | boolean/Boolean |
たとえば、以下では "scientist" フィールドの値を "Darwin" に設定して、filterField フィールドが true である すべて のレコードを更新します。
// route: from("direct:update").to("mongodb3:myDb?database=science&collection=notableScientists&operation=update");
Bson filterField = Filters.eq("filterField", true);
String updateObj = Updates.set("scientist", "Darwin");
Object result = template.requestBodyAndHeader("direct:update", new Bson[] {filterField, Document.parse(updateObj)}, MongoDbConstants.MULTIUPDATE, true);
// route: from("direct:update").to("mongodb3:myDb?database=science&collection=notableScientists&operation=update");
Bson filterField = Filters.eq("filterField", true);
String updateObj = Updates.set("scientist", "Darwin");
Object result = template.requestBodyAndHeader("direct:update", new Bson[] {filterField, Document.parse(updateObj)}, MongoDbConstants.MULTIUPDATE, true);
// route: from("direct:update").to("mongodb3:myDb?database=science&collection=notableScientists&operation=update");
String updateObj = "[{\"filterField\": true}, {\"$set\", {\"scientist\", \"Darwin\"}}]";
Object result = template.requestBodyAndHeader("direct:update", updateObj, MongoDbConstants.MULTIUPDATE, true);
// route: from("direct:update").to("mongodb3:myDb?database=science&collection=notableScientists&operation=update");
String updateObj = "[{\"filterField\": true}, {\"$set\", {\"scientist\", \"Darwin\"}}]";
Object result = template.requestBodyAndHeader("direct:update", updateObj, MongoDbConstants.MULTIUPDATE, true);