使用 Apache Camel 从 Mongo 数据库中删除文档

Remove a document from Mongo DB with Apache Camel

我的主要问题可能是不理解 Camel 文档中的一些约定。

https://camel.apache.org/components/latest/mongodb-component.html#_delete_operations

他们有一条骆驼路线被注释掉,并且定义了两个 Java 对象,但没有被注释掉。他们想表达什么?这些对象在项目中的什么位置?

无论如何,我订阅了一个 JMS 队列,我有另一个 camel 路由发布到该队列。该消息是一个 JSON 字符串,我将其保存到 Mongo 数据库中。但我想做的是删除所有当前文档(基于条件)并用新消息替换它。

from("jms:topic:orderbook.raw.feed")
.log("JMS Message: ${body}")
    .choice()
        .when().jsonpath("$.[?(@.type=='partial')]")
            // Figure out how to delete the old orderbook from Mongo with a type=T1
            .to("mongodb:mongo?database=k2_dev&collection=orderbooks&operation=save");

你的订单有ID吗?如果是这样,您可以使用 _id 字段(MongoDB 标识符的默认表示)来丰富 JSON,其值将是该 ID。因此,您将“更新”该订单簿。

观察:当然,Camel 文档可能会更好。

但如果您真的觉得在保存订单簿之前必须执行 remove 操作,另一种选择是从当前 JSON 字符串中提取其类型并将其用作删除时过滤。类似于:

from("jms:topic:orderbook.raw.feed")
    .log("JMS Message: ${body}")
    .filter("$.[?(@.type=='partial')]")
    .multicast().stopOnException()
        .to("direct://orderbook-removal")
        .to("direct://orderbook-save")
    .end()
;

from("direct://orderbook-removal")
    // extract type and set it as the body message. e.g. {"type":"T1"}
    .to("mongodb:mongo?database=k2_dev&collection=orderbooks&operation=remove")
;

from("direct://orderbook-save")
    .to("mongodb:mongo?database=k2_dev&collection=orderbooks&operation=save")
;

multicast 将邮件的副本发送到每个目的地。所以内容不会受到影响。