You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Hyperledger Composer Query Language带参数的CONTAINS运算符示例

Hyperledger Composer Query Language: 使用参数的CONTAINS运算符示例

我明白你在尝试用参数化的CONTAINS查询时遇到了问题——其实你的思路方向是对的,但写法上可能有个小细节没处理到位,导致查询无法正常运行。下面我给你几个正确的示例,以及排查问题的关键点:

基础参数化CONTAINS查询示例

首先,确保你的查询定义里参数的语法正确,以下是一个可运行的完整查询:

query findParticipantsWithMatchingRole {
  description: "查找角色字段包含指定参数值的参与者"
  participant: org.example.MyParticipant
  where: (role CONTAINS _$targetRole)
  sort: [ { field: id, direction: ASC } ]
}

这里的_$targetRole就是我们要传递的参数,注意参数名前的_$前缀是Hyperledger Composer查询语言的要求,不能省略。

调用查询时的参数传递

定义好查询后,调用时需要正确传递参数值:

在JavaScript客户端中调用

// 假设已经建立了businessNetworkConnection连接
const matchingParticipants = await businessNetworkConnection.query(
  'findParticipantsWithMatchingRole',
  { targetRole: 'admin' } // 这里的key要和查询里的参数名(去掉_$)一致
);
console.log('匹配的参与者:', matchingParticipants);

在Composer REST API中调用

如果通过REST API访问,直接在URL中传递参数即可:

GET /api/queries/findParticipantsWithMatchingRole?targetRole=admin

排查你遇到的问题

你的原写法WHERE (role CONTAINS _$role)可能遇到的问题:

  • 参数名冲突:你的参数名_$role和字段名role同名,虽然语法上允许,但容易造成混淆,建议改用不同的名称(比如上面的_$targetRole)
  • 字段类型不匹配:确认你的role字段在CTO模型中是String类型——CONTAINS运算符仅支持字符串类型的字段查询
  • 参数传递错误:调用查询时,确保传递的参数名和查询中定义的参数名(去掉_$后)完全一致,大小写也要匹配

进阶:不区分大小写的CONTAINS查询

如果需要不区分大小写的匹配,可以结合LOWER()函数来实现:

query findParticipantsWithMatchingRoleCaseInsensitive {
  description: "不区分大小写查找角色字段包含指定参数值的参与者"
  participant: org.example.MyParticipant
  where: (LOWER(role) CONTAINS LOWER(_$targetRole))
  sort: [ { field: id, direction: ASC } ]
}

这样无论role字段里是大写还是小写,只要包含参数值的对应大小写形式,都能匹配到。

内容的提问来源于stack exchange,提问作者Jeson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:56:47