这是我的第一个问题,因此,如果我的问题缺少一些核心信息,请耐心等待。我将尝试尽快添加所需的信息。 我正在建立一个骆驼路线,该路线从我的数据库中检索一个URL并将该URL发送给搜寻器,该爬行器收集一些产品数据。然后,我从搜寻器收到的数据将保存回数据库中的另一个集合中。 当我爬网另一个包含相同产品的URL时,我想将新接收的数据添加到数据库中的对象中。
我试图将新接收的数据保存在一个Property中,然后设置两个常量以在数据库中找到相应的项目。找到对象之后,我想将接收到的数据发送到处理器,在其中将新数据添加到检索到的对象中,然后将其保存回数据库。
from("direct:myRoute")
...
.setProperty("newItem").simple("${body}")
.setBody().constant("{ 'name': $.name}")
.setBody().constant("{ 'brand': $.brand}")
.to("mongodb:mongoBean?database={{db}}&collection=
{{col}}&operation=findOneByQuery")
...
预期结果应该是,我的数据库对象存储了旧信息并存储了新接收的信息,但是我得到的是,{ 'name': $.name}
无效BasicDBObject
,与品牌相同。
更新
因此,我发现,对于我想要实现的目标,不可能设置两个常量。我做了一些实验,并使其能够与硬编码示例一起使用。
from("direct:myRoute")
...
.setProperty("newItem").simple("${body}")
.setBody().constant("{ 'name': 'product','brand': 'manufacturer'}")
.to("mongodb:mongoBean?database={{db}}&collection=
{{col}}&operation=findOneByQuery")
...
但是问题仍然存在,我想将“名称”和“品牌”设置为从正文提取的json变量。
更新2
我稍稍更改了代码,并在代码中尝试了以下示例。
from("direct:myRoute")
...
.setProperty("newItem").simple("${body}")
.setBody().constant("{ 'name' : '{$.name}','brand' : '{$.brand}' }")
.to("mongodb:mongoBean?database={{db}}&collection=
{{col}}&operation=findOneByQuery")
...
我没有从中得到任何错误,但是它没有按预期工作。我希望$ .name和$ .brand可以替换为存储在正文中的变量,但是看来,它们可以按原样使用
2019-11-06 13:27:43.363信息2132 --- [XNIO-1 task-1]调试 :Exchange [ExchangePattern:InOut,BodyType:字符串,正文:{'name': '{$ .name}','brand':'{$ .brand}'}]