Hyperledger Composer 查询资产的参数
Hyperledger Composer Query an Asset's parameter
我已经这样定义了我的 hyperledger composer 模型文件;
namespace org.acme.myNetwork
asset Asset identified by assetId {
o String assetId
--> Owner owner
o String assetStatus
}
participant Owner identified by ownerId {
o String ownerId
o String ownerName
o String ownerStatus
}
我想查询值为 assetStatus = "invalid" 的资产的所有者。我读过 hyperledger composer query language 文档,他们似乎只有个人可以查询资产或参与者的示例,但没有显示如何查询资产或参与者参数的示例。
query selectAsset {
description: "Select Asset"
statement: SELECT org.acme.myNetwork.Asset
WHERE assetStatus == "invalid"
}
query selectAssetParameter {
description: "Select Asset Parameter"
statement: SELECT org.acme.myNetwork.Asset.owner
WHERE assetStatus == "invalid"
}
上面查询的第一个示例是有效的,但编写的第二个查询会在 playground 中抛出此错误:
Error found!
t: Namespace is not defined for type org.acme.myNetwork.Asset.owner
我将您的模型粘贴到 Composer Playground 中并收到一条错误消息,您的资产名称显示 Asset
是保留字 - 如果您能够使用不同的方法部署此模型,我想知道提出一个问题。我使用资产名称 Ass1
进行测试。
对于您的查询,您需要在 where 条件周围加上括号,例如WHERE (assetStatus == "invalid")
要回答您的问题 - 您已经针对 属性 (assetStatus) 创建了一个查询,但结果集将始终是 完整资产 的列表,而不是只是一个人 属性(这与 SQL select 不同)。
您的查询将 return 匹配 'invalid' 的资产,所有者将 return 编辑为资源参考。例如"owner": "resource:org.acme.myNetwork.Owner#AA1"
如果您想要获取 Owner 的所有属性,而不仅仅是 ID,那么您将不得不编写第二个查询,或者对 Owner 注册表执行 GET 请求。作为替代方案,您可以对 Ass1(资产)注册表的 GET 请求使用 过滤器,这将 "resolve" 所有者。
所以使用这个过滤器:{"where":{"assetStatus":"invalid"}, "include":"resolve"}
在这个端点 /api/Ass1
使用 GET 请求你会看到这个结果:
{
"$class": "org.acme.myNetwork.Ass1",
"assetId": "WILL01",
"owner": {
"$class": "org.acme.myNetwork.Owner",
"ownerId": "AA1",
"ownerName": "Albert",
"ownerStatus": "VALID"
},
"assetStatus": "invalid"
}
我已经这样定义了我的 hyperledger composer 模型文件;
namespace org.acme.myNetwork
asset Asset identified by assetId {
o String assetId
--> Owner owner
o String assetStatus
}
participant Owner identified by ownerId {
o String ownerId
o String ownerName
o String ownerStatus
}
我想查询值为 assetStatus = "invalid" 的资产的所有者。我读过 hyperledger composer query language 文档,他们似乎只有个人可以查询资产或参与者的示例,但没有显示如何查询资产或参与者参数的示例。
query selectAsset {
description: "Select Asset"
statement: SELECT org.acme.myNetwork.Asset
WHERE assetStatus == "invalid"
}
query selectAssetParameter {
description: "Select Asset Parameter"
statement: SELECT org.acme.myNetwork.Asset.owner
WHERE assetStatus == "invalid"
}
上面查询的第一个示例是有效的,但编写的第二个查询会在 playground 中抛出此错误:
Error found!
t: Namespace is not defined for type org.acme.myNetwork.Asset.owner
我将您的模型粘贴到 Composer Playground 中并收到一条错误消息,您的资产名称显示 Asset
是保留字 - 如果您能够使用不同的方法部署此模型,我想知道提出一个问题。我使用资产名称 Ass1
进行测试。
对于您的查询,您需要在 where 条件周围加上括号,例如WHERE (assetStatus == "invalid")
要回答您的问题 - 您已经针对 属性 (assetStatus) 创建了一个查询,但结果集将始终是 完整资产 的列表,而不是只是一个人 属性(这与 SQL select 不同)。
您的查询将 return 匹配 'invalid' 的资产,所有者将 return 编辑为资源参考。例如"owner": "resource:org.acme.myNetwork.Owner#AA1"
如果您想要获取 Owner 的所有属性,而不仅仅是 ID,那么您将不得不编写第二个查询,或者对 Owner 注册表执行 GET 请求。作为替代方案,您可以对 Ass1(资产)注册表的 GET 请求使用 过滤器,这将 "resolve" 所有者。
所以使用这个过滤器:{"where":{"assetStatus":"invalid"}, "include":"resolve"}
在这个端点 /api/Ass1
使用 GET 请求你会看到这个结果:
{
"$class": "org.acme.myNetwork.Ass1",
"assetId": "WILL01",
"owner": {
"$class": "org.acme.myNetwork.Owner",
"ownerId": "AA1",
"ownerName": "Albert",
"ownerStatus": "VALID"
},
"assetStatus": "invalid"
}