WSO2集成Studio中查询含#字符的MongoDB记录为何报参数不足?
问题原因
WSO2 Integration Studio的MongoDB数据服务解析逻辑会把查询语句中的#字符识别为参数占位符,而非普通文本字符。这就导致你的查询被引擎误判为需要传入对应参数,但你并没有提供参数值,因此抛出IllegalArgumentException: Not enough parameters passed to query错误。而Mongo Compass不会做这种特殊解析,所以查询能正常执行。
解决办法
方法1:转义#字符
在查询表达式里给#加上反斜杠\转义,明确告诉引擎这是普通字符:
<expression> collectionName.count({"_id.type": 'https://uri.fiware.org/ns/data-models\#Building'}) </expression>
方法2:使用参数绑定(更推荐)
通过参数传递的方式避免引擎误解析,同时让查询更灵活:
- 先在数据服务配置中定义参数:
<param name="targetType" sqlType="STRING"/>
- 修改查询表达式,用
?占位符引用参数:
<expression> collectionName.count({"_id.type": ?}) </expression>
- 调用数据服务时,传入参数值:
https://uri.fiware.org/ns/data-models#Building
验证
修改完成后重新部署数据服务,执行查询即可正常获取结果,和Mongo Compass中的运行效果一致。
内容的提问来源于stack exchange,提问作者Ahmet Kalem
相关产品推荐
相关产品推荐

