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

How to match string in query file in 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
    }
);

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

使用 whereand 过滤器,

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

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

更新

可以通过在 namespace 名称前加上 Resource type 前缀,然后是 #Unique 资源 ID 来完成关系匹配。

let idProofs = await query('selectRequestedIdProofsByOwner',
    {
        "where": {
            "and": [
                { "owner": "resource:org.example.businessnetwoek.ParticipantType#"+proofOwner },
                { "proofName": proofName }
            ]
        }
    }
);

在您的示例中 uniqueId 将是 proofOwner