如何使 Hyper ledger Composer 查询不区分大小写?

How to make Hyper ledger Composer query case insensitive?

我在 hyperledger composer queries.qry 文件中有一个查询。

query checkOwnerUniqueness{
  description: "Select owner with given identifier"
  statement:
    SELECT org.acme.participant.Owner
       WHERE (idNum ==  _$idNum)
}

现在,如果 ID 号是 abc123 并且用户搜索 abc123,我的查询就可以工作,但如果用户将值作为 ABC123 传递,它就会失败。但是我想查询所有者是否以小写或大写形式输入字符。

我已经尝试过一般的 SQL API,即 LOWER() 和 UPPER(),但它们似乎在 Hyperleger composer 查询语言中不起作用。所以有些人可以帮助我了解如何在 Hyperledger Composer 查询文件中执行此操作。

我首先建议在同一情况下首先(即以编程方式)插入 ID。 Composer 只需将查询传递给 CouchDB 的查询语言 FYI,并尊重输入数据时的大小写敏感性。

您是否知道可以使用 regex 来验证 ID 字段(请参阅建模语言文档 here? - 对我来说似乎是一个非常重要的字段(而不是说姓氏字段) .

您可以在您的函数中使用其他 buildQuery 函数(例如,仍然使用一个参数)——或者如果您坚持将 QUERY 保留在 queries.qry 中,则提供两个(较低和较高):

query checkOwnerUniqueness{
  description: "Select owner with given identifier"
  statement:
    SELECT org.acme.participant.Owner
       WHERE (idNum ==  _$upper ID idNum == _$lower )
}


var str = "joe123";
var lower = str.toLowerCase();
var upper = str.toUpperCase();
return query('checkOwnerUniqueness', {idNum: str} ) // ID passed in lower case
// OR
// return query('checkOwnerUniqueness', {idNum: lower, idNum: upper})  // upper or lower two parms
    .then(function (results) {
            for (var n = 0; n < results.length; n++) { // blah
            // process all objects returned in the query
            }
    });

无论如何给你替代方案 - 我想我会确保 ID 字段总是以相同的大小写输入,只是说。