Hyperledger Composer嵌套资产查询:编写特定Transact实例查询语句
Hyperledger Composer 查询:筛选关联特定Asset1的Transact实例
我来帮你搞定这个查询需求!要筛选出关联符合条件的Asset1的Transact实例,咱们可以利用Hyperledger Composer查询语言的关联路径访问特性来实现,下面分几种常见场景给你具体的查询示例:
1. 基础场景:关联的Asset1满足简单属性条件
比如你要找关联的Asset1的Asset1Id等于某个特定值(比如'ASS1')的Transact实例,查询语句可以这么写:
query findTransactsByAsset1Id { description: "找到关联指定Asset1Id的Transact实例" statement: SELECT org.acme.biznet.Transact WHERE (asset1.Asset1Id == 'ASS1') }
这里的核心是通过asset1.Asset1Id直接访问Transact关联的Asset1的属性——因为你的Transact定义里有指向Asset1的关联字段asset1,所以可以直接通过这个路径嵌套访问。
2. 进阶场景:关联的Asset1包含特定Asset2
如果你的条件是Asset1的contents数组里包含某个指定的Asset2(比如Asset2Id为'ASS2'),可以使用CONTAINS关键字来检查数组元素:
query findTransactsByAsset1Contents { description: "找到关联的Asset1包含指定Asset2的Transact实例" statement: SELECT org.acme.biznet.Transact WHERE (asset1.contents CONTAINS (Asset2Id == 'ASS2')) }
CONTAINS会遍历Asset1的contents数组,判断是否存在符合条件的Asset2元素。
3. 组合条件查询
如果需要同时满足多个条件(比如Asset1的ID是指定值,且其contents包含某个Asset2),直接用AND连接多个条件即可:
query findTransactsByCombinedConditions { description: "找到符合组合条件的Transact实例" statement: SELECT org.acme.biznet.Transact WHERE (asset1.Asset1Id == 'ASS1') AND (asset1.contents CONTAINS (Asset2Id == 'ASS2')) }
小提示
这些查询需要放在你的Composer项目的.qry文件中,部署业务网络后,就可以通过Composer CLI或者API来调用啦。记得要保证查询里的字段名(比如asset1、contents、Asset1Id)和你定义的资产/交易字段完全一致,大小写也不能出错哦!
内容的提问来源于stack exchange,提问作者CoderTillDeath
相关产品推荐
相关产品推荐

