38.7.2.2. save
save 操作等同于一个 upsert (UPdate,inSERT)操作,记录将更新的位置,如果记录不存在,它将在一个原子操作中插入。MongoDB 将根据 _id
字段执行匹配。
请注意,如果更新,对象将被完全替换,并且不允许使用 MongoDB 的 $modifier。因此,如果您要操作对象(如果已存在),有两个选项:
- 执行查询,以便首先检索整个对象及其所有字段(效率不高),在 Camel 中更改它,然后保存它。
- 将 update 操作与 $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);