228.6.2.3. update

更新集合上的一个或多个记录。需要 List<DBObject> 作为 IN 消息正文,该正文正好包含 2 个元素:

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

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

带有密钥 CamelMongoDbRecords 受影响的 标头(带有更新的记录数的MongoDbConstants.RECORDS_AFFECTED constant)被更新(由 WriteResult.getN()生成)。

支持以下 IN 消息标头:

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

CamelMongoDbMultiUpdate

MongoDbConstants.MULTIUPDATE

如果更新应应用于所有匹配对象。See http://www.mongodb.org/display/DOCS/Atomic+Operations

boolean/Boolean

CamelMongoDbUpsert

MongoDbConstants.UPSERT

如果数据库应该创建这个元素(如果不存在)

boolean/Boolean

例如,以下命令将 filterField 字段的值设为 "Darwin" 字段的值来更新其 filterField 字段等于 true 的所有记录:

// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update");
DBObject filterField = new BasicDBObject("filterField", true);
DBObject updateObj = new BasicDBObject("$set", new BasicDBObject("scientist", "Darwin"));
Object result = template.requestBodyAndHeader("direct:update", new Object[] {filterField, updateObj}, MongoDbConstants.MULTIUPDATE, true);