You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Apache Camel实现单次请求查询Mongo两个集合后合并插入数据

Apache Camel MongoDB 多集合关联插入实现方案

你需要在原有单集合插入路由的基础上,增加「原始参数暂存、collection2查询、数据合并」三个环节即可实现需求,完整实现代码如下:

rest().post("/createcollection1")
    .route()
    .log("原始请求参数: ${body}")
    // 暂存原始请求参数,避免后续Mongo查询操作覆盖body导致数据丢失
    .setProperty("originalPayload", body())
    // 构造collection2查询条件,示例默认用item字段关联两个集合,可根据实际业务调整
    .setBody().simple("{ \"item\": \"${body.item}\" }")
    // 查询collection2的匹配单条数据
    .to("mongodb:myMongo?database=practice&collection=collection2&operation=findOne")
    // 合并collection2的qty字段和原始请求参数
    .process(exchange -> {
        // 取出暂存的collection1插入参数
        Map originalBody = exchange.getProperty("originalPayload", Map.class);
        // 取出collection2的查询结果
        org.bson.Document collection2Doc = exchange.getIn().getBody(org.bson.Document.class);
        // 合并qty字段
        originalBody.put("qty", collection2Doc.getInteger("qty"));
        // 把合并后的完整数据设置为新的body
        exchange.getIn().setBody(originalBody);
    })
    // 插入合并后的完整文档到collection1
    .to("mongodb:myMongo?database=practice&collection=collection1&operation=insert")
    // 可选:返回插入结果给调用方
    .setBody().simple("插入成功,文档ID:${headers.CamelMongoOid}");

关键逻辑说明

  • 关联规则调整:如果两个集合的关联字段不是item,只需修改setBody步骤中的查询语句即可,比如按id关联就改为{ \"_id\": \"${body.id}\" }
  • 异常兼容:可在process逻辑中增加空值校验,比如collection2无匹配数据时为qty设置默认值,避免空指针异常
  • 类型适配:如果接口入参是自定义实体类而非Map,只需将process中originalBody的接收类型替换为对应的实体类即可
  • 插入结果获取:Camel MongoDB组件会自动把生成的文档ID存入CamelMongoOid请求头,可直接取出使用

内容的提问来源于stack exchange,提问作者kumaranc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 06:06:04