229.6.2.3. update


更新集合中的一个或多个记录。需要一个过滤器查询和更新规则。

您可以将 MongoDBConstants.CRITERIA 标头定义为 Bson,并将更新规则定义为 Body 中的 Bson

注意

丰富后更新 .在使用 MongoDBConstants.CRITERIA 标头作为 Bson 来定义过滤器时,要在更新前查询 mongodb,您应当注意到,如果在聚合策略使用丰富的模式,则应用 mongodb 更新时,应该会发现它从聚合的交换中删除。如果您在聚合和/或重新定义 MongoDBConstants.CRITERIA 标头期间没有删除此标头,那么在更新 mongodb 的过程中可能会出现无效的 camel Exchange payload。

第二种方式是将 List<Bson> Require a List<Bson> 作为 IN 消息正文,该正文正好包含 2 个元素:

  • 元素 1 (index 0) PromQL 过滤器查询 TOKEN 决定哪些对象会受到影响,与典型的查询对象相同
  • 元素 2 (index 1)• 更新规则 WWN 如何更新匹配的对象。支持 MongoDB 中的所有 修饰符操作
注意

Multiupdates .默认情况下,即使多个对象与过滤器查询匹配,MongoDB 也会更新 1 对象。要指示 MongoDB 更新所有 匹配记录,请将 CamelMongoDbMultiUpdate IN 消息标头设置为 true

将返回一个带有键 CamelMongoDbRecordsAffected 的标头(MgoDbConstants.RECORDS_AFFECTED constant)以及更新的记录数(从 WriteResult.getN ()中结束)。

支持以下 IN 消息标头:

标头密钥快速持续描述(从 MongoDB API doc中提取)预期类型

CamelMongoDbMultiUpdate

MongoDbConstants.MULTIUPDATE

如果更新应应用到匹配的所有对象。请查看 http://www.mongodb.org/display/DOCS/Atomic+Operations

布尔值/Boolean

CamelMongoDbUpsert

MongoDbConstants.UPSERT

如果数据库不存在,则应创建这个元素

布尔值/Boolean

例如,以下命令将"科学家"字段的值设置为 "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");
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);
// 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);
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.