如何在Hyperledger Composer中的查询文件中匹配字符串?

时间:2019-01-30 13:35:02

标签: javascript hyperledger-fabric hyperledger hyperledger-composer

我在此查询语句中遇到一个问题:查询未返回任何结果。

查询:

statement:
      SELECT org.example.identitynetwork.IdentityProof
          WHERE ((owner == _$owner) AND (proofName == _$proofName))

我的首席技术官是:

asset IdentityProof identified by proofId {
  o String proofId
  o String proofName
  o String encodedData
  --> Owner owner
}

在logic.js中:

let idProofs = await query('selectRequestedIdProofsByOwner',
    {
        "owner": proofOwner,
        "proofName": proofName
    }
);

即使我已正确配置权限,并且存在具有给定所有者和证明名称的证明,此查询也不会返回任何结果。

1 个答案:

答案 0 :(得分:1)

使用whereand过滤器,

let idProofs = await query('selectRequestedIdProofsByOwner',
    {
        "where": {
            "and": [
                { "owner": proofOwner },
                { "proofName": proofName }
            ]
        }
    }
);

要注意的一点,这不适用于关系属性,这仅用于基本的字符串匹配。在您的示例中,ownerproofOwner的匹配不起作用。

更新

可以通过在namespace的前缀前面加上Resource type#资源ID来实现关系匹配。

Unique

在您的示例中,let idProofs = await query('selectRequestedIdProofsByOwner', { "where": { "and": [ { "owner": "resource:org.example.businessnetwoek.ParticipantType#"+proofOwner }, { "proofName": proofName } ] } } ); 将是uniqueId