【问题标题】:Mongodb $set and $inc in camelMongodb $set 和 $inc 在骆驼
【发布时间】:2019-08-06 13:22:42
【问题描述】:

我正在尝试使用 $set 和 $inc 标志来更新字段并将camel(java)中的字段增加1。这是我正在使用的代码:

from("direct:mySampleRoute").routeId("update-mongo-db-entry").setBody()
    .simple("{\"person\": \"${headers.personName}\", \"job\": \"computerGuy\",\"title\": \"DR\"},"
    + "{\"$set\": {\"pay\": \"${headers.newPay}\"}, \"$inc\": {\"hrPay\": 1}}")
    .toD("mongodb:mongoClient?database=" + mongoDb + "&collection="
            + mongoEmplyeeCollection + "&operation=update")
    .end();

查询的目标是找到 person == ${headers.personName}、job == computerGuy 和 title = DR 的条目。找到后,将支付字段设置为 ${headers.newPay} 并将 hrPay 字段设置为正 1。据我所知,我的代码结构与这篇文章中提到的完全相同:@987654321 @ 但是,一旦执行,我的应用程序就会崩溃,并且我无法看到任何有关该查询失败原因的日志。因此,我怀疑我在构建 json 更新时遇到了根本问题。位于 here 的 Camel 文档的帮助有限。

使用骆驼,我怎样才能实现“选择”查询、使用 $set 更新某些字段以及使用 $inc 递增字段的目标?

【问题讨论】:

    标签: mongodb apache-camel


    【解决方案1】:

    我最终使用处理器来创建所需的主体来解决我的问题。我在 process 方法中使用了这个语法:

    @Override
    public void process(final Exchange exchange) throws Exception {
        final BasicDBObject filterQuery = new BasicDBObject();
        filterQuery.append("person", exchange.getIn().getHeader("personName"));
        filterQuery.append("job", "computerGuy");
        filterQuery.append("title", "DR");
        final BasicDBObject updateQuery = new BasicDBObject();
        updateQuery.append("$set", new BasicDBObject("pay", exchange.getIn().getHeader("newPay"))
                .append("location", "4th floor"));
        updateQuery.append("$inc", new BasicDBObject("hrPay", 1));
        final List<DBObject> query = new ArrayList<>();
        query.add(filterQuery);
        query.add(updateQuery);
        exchange.getIn().setBody(query);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 2015-05-05
      • 2022-01-11
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多