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

Hyperledger Composer中基于DeviceID查询Reading资产的方法

在Hyperledger Composer中基于字符串类型字段(DeviceID)查询资产的方法

没问题,我懂你的需求——默认的主键查询确实方便,但要按DeviceID这种字符串字段筛选Reading资产,只需要自定义一个查询就行,完全不需要复杂编码,步骤很清晰:

1. 创建/编辑查询文件

首先找到你的Hyperledger Composer项目里的queries目录,里面应该有个.qry后缀的查询文件(如果没有就新建一个,比如reading-queries.qry)。

2. 编写针对DeviceID的查询

在这个文件里添加以下查询语句,记得把org.yournamespace替换成你定义资产时用的实际命名空间:

query selectReadingsByDeviceID {
  description: "筛选所有拥有指定DeviceID的Reading资产"
  statement:
    SELECT org.yournamespace.Reading
      WHERE (DeviceID == _$deviceId)
}

这里的_$deviceId是参数占位符,后面调用查询时可以传入具体的DeviceID字符串值。

3. 重新部署业务网络

修改完查询文件后,需要把更新后的业务网络重新部署,确保新查询被加载。用下面的命令(替换成你的网络包和连接名称):

composer network update -a your-business-network.bna -c admin@your-network-name

如果是开发环境,也可以先卸载旧网络,再重新安装启动,效果是一样的。

4. 调用查询获取结果

部署完成后,不管是在应用代码里还是命令行都能调用这个查询:

  • 命令行测试:
composer network query -c admin@your-network-name -q selectReadingsByDeviceID -p '{"deviceId":"YOUR-TARGET-DEVICE-ID"}'

把YOUR-TARGET-DEVICE-ID换成你要查询的具体DeviceID字符串就行。

  • JavaScript API调用:
const BusinessNetworkConnection = require('composer-client').BusinessNetworkConnection;

async function getReadingsByDeviceId(deviceId) {
  const connection = new BusinessNetworkConnection();
  await connection.connect('admin@your-network-name');
  
  const readings = await connection.query('selectReadingsByDeviceID', { deviceId });
  console.log('查询到的Reading资产:', readings);
  return readings;
}

// 调用示例
getReadingsByDeviceId('DEVICE-001');

这样就能轻松获取到所有对应DeviceID的Reading资产了,字符串类型的字段查询和其他类型的查询逻辑是一致的,只是参数传入的是字符串而已。

内容的提问来源于stack exchange,提问作者Santiago de Diego

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:52:15