mongodb - Mongodb $set 和 $inc 在骆驼
问题描述
我正在尝试使用 $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 的条目。找到后,将 pay 字段设置为 ${headers.newPay} 并将 hrPay 字段设置为正 1。据我所知,我的代码结构与这篇文章中提到的完全相同:What am我在更新中使用 $set 和 $inc 做错了但是,一旦执行,我的应用程序就会崩溃,并且我无法看到任何关于该查询失败原因的日志。因此,我怀疑我在构建 json 更新时遇到了根本问题。位于此处的骆驼文档的帮助有限。
使用骆驼,我怎样才能实现进行“选择”查询、使用 $set 更新某些字段以及使用 $inc 递增字段的目标?
解决方案
我最终使用处理器来创建所需的主体来解决我的问题。我在 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);
}
推荐阅读
- artifactory - 在 JFrog Artifactory 中,我们可以自定义虚拟存储库中的工件文件夹吗
- android - 过滤 Logcat 日志 android
- lua - 这些是什么类型的元方法,它们为什么存在以及它们是如何创建的
- c++ - 将预先存在的套接字与节俭服务器一起使用?
- webserver - 气流网络服务器正在关闭
- python - 如何修复这个 Wide & Deep RNN?
- signals - 如何在 Godot 中制作类似 MMO 的技能快捷栏?
- python - 从 Python 函数访问 Azure Blob 的问题
- c# - 将类序列化为字典
- azure - CSP 计划的每日计费状态