我有两个集合,一个组织和组织中的品牌之一,我试图产生一个结果集,将与组织相关的品牌显示为在组织JSON结果中嵌套JSON。Mule Mongo连接器产生INNER JOIN结果
获取结果的代码如下所示,它确实返回了预期的结果,但最终的JSON在每个brad中都有引号。如何将品牌的JSON包含在字符串中?
查询的单个组织通过蒙戈ID从蒙戈:
<mongo:find-one-object-using-query-map config-ref="mdb_config" collection="orgs" doc:name="Fetch object from Mongo">
<mongo:query-attributes>
<mongo:query-attribute key="_id">#[new org.bson.types.ObjectId(flowVars.OrgId)]</mongo:query-attribute>
</mongo:query-attributes>
</mongo:find-one-object-using-query-map>
<mongo:db-object-to-map doc:name="Map Mongo object to hashmap"/>
查询为单位启用品牌列表:
<foreach collection="#[payload.brands]" doc:name="For Each" rootMessageVariableName="rootMessage">
<mongo:find-one-object-using-query-map config-ref="mdb_config" collection="brands" doc:name="Fetch brands for org">
<mongo:query-attributes>
<mongo:query-attribute key="_id">#[new org.bson.types.ObjectId(message.payload)]</mongo:query-attribute>
</mongo:query-attributes>
</mongo:find-one-object-using-query-map >
<!-- Transform the brand from Mongo to JSON schema compliant JSON -->
<scripting:transformer doc:name="Map Mongo object to JSON">
<scripting:script engine="Groovy"><![CDATA[
def builder = new groovy.json.JsonBuilder()
def root = builder {
brandId payload._id.toString()
//...
isActive payload.platformHeader.isActive
}
return builder.toPrettyString();
]]></scripting:script>
</scripting:transformer>
<expression-component>brandResponses.add(message.payloadAs(java.lang.String))
</expression-component>
<logger message="The result is #[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/>
</foreach>
<logger level="INFO" message="#[brandResponses]"/>
<!-- Transform the org from Mongo to JSON schema compliant JSON -->
<scripting:transformer doc:name="Map Mongo object to JSON">
<scripting:script engine="Groovy"><![CDATA[
def brandsPayload = flowVars.brandResponses
def builder = new groovy.json.JsonBuilder()
def root = builder {
orgId payload._id.toString()
//...
isActive payload.platformHeader.isActive
brands(brandsPayload.collect {it})
}
return builder.toPrettyString();
]]></scripting:script>
</scripting:transformer>
所得JSON
{
"orgId": "5565f305b85c31182a65a6a7",
"isActive": true,
"brands": [
"{
"brandId": "5565f2ff03758e0c189a753d",
"isActive": true
}",
"{
"brandId": "5565f2ff03758e0c189a7594",
"isActive": true
}"
]
}
感谢大卫,工作 – nmanela
感谢大卫,您的答案是真正有用的,同时构建解决方案与最新的Mongo DB连接器v4.2.0类似的问题(下面回答) – PankajChandankar