34.7.2.2. save
save 操作等同于一个 upsert (UPdate、inSERT)操作,其中将会更新记录,如果不存在,则会插入一个 atomic 操作。MongoDB 将基于 _id
字段执行匹配。
请注意,如果更新,对象会被完全替换,且不允许使用 MongoDB 的 $mod ifier。因此,如果您要操作对象已存在,有两个选项:
- 执行查询以首先与所有对象一同检索整个对象(可能并不有效),在 Camel 内进行更改,然后保存它。
- 使用 $modifiers 的更新操作,其将在服务器端执行更新。您可以启用 upsert 标志。在这种情况下,MongoDB 将 $modifiers 应用到过滤器查询对象并插入结果。
如果要保存的文档不包含 _id
属性,则操作将是插入,并且创建的新的 _id
将放在 CamelMongoOid
标头中。
例如:
from("direct:insert") .to("mongodb:myDb?database=flights&collection=tickets&operation=save");
// route: from("direct:insert").to("mongodb:myDb?database=flights&collection=tickets&operation=save"); org.bson.Document docForSave = new org.bson.Document(); docForSave.put("key", "value"); Object result = template.requestBody("direct:insert", docForSave);