精通Hyperledger之Hyperledger composer查询语言(17)

    一、概念理解

    Hyperledger Composer中的查询以定制查询语言编写。查询queries.qry在业务网络定义中的一个称为()的查询文件中定义。数组

    全部查询都必须包含descriptionstatement属性。网络

    该description属性是描述查询功能的字符串。它必须包含但能够包含任何东西。spa

statement属性包含查询的定义规则,而且能够具备如下运算符:rest

  • SELECT 是强制性操做员,默认状况下定义要返回的注册表和资产或参与者类型。
  • FROM 是一个可选运算符,它定义了一个不一样的注册表来进行查询
  • WHERE 是一个可选运算符,它定义了要应用于注册表数据的条件。
  • AND 是定义附加条件的可选运算符。
  • OR 是可选运营商,它定义了替代条件。
  • CONTAINS 是一个可选运算符,它定义数组值的条件
  • ORDER BY 是定义排序或结果的可选运算符。
  • SKIP 是一个可选运算符,用于定义要跳过的结果数量。
  • LIMIT 是一个可选运算符,它定义了从查询返回的最大结果数量,默认状况下,极限值设置为25。

注:若是您使用Hyperledger fabricV1.1或如下时,LIMITSKIP将没法正常工做,有路过的PARAMS到CouchDB的织物上的问题。参考Hyperledger Fabric问题:FAB-2809code

    二、示例查询 

    此查询返回年龄小于所提供参数 firstName为“Dan” 的默认注册表中的全部驱动程序,只要其姓氏不是“Selman”。实际上,这个查询返回全部没有姓氏“Selman”的驱动程序,只要它们在定义的年龄之下,或者具备firstName Dan,而且按lastName升序和firstName升序来命令结果。排序

query Q20{ description: "Select all drivers younger than the supplied age parameter or who are named Dan and whose lastName is not Selman, ordered from A-Z by firstName" statement: SELECT org.example.Driver WHERE ((age < _$ageParam OR firstName == 'Dan') AND (lastName != 'Selman')) ORDER BY [lastName ASC, firstName ASC] }

  三、查询中的参数

    查询能够使用运行查询时必须提供的未定义参数编写。例如,如下查询将返回age属性大于提供的参数的全部驱动程序:ip

query Q17 { description: "Select all drivers aged older than PARAM" statement: SELECT org.example.Driver WHERE (_$ageParam < age) }

四、示例包含查询

    CONTAINS过滤器用于搜索节点中的数组字段。下面的查询返回全部得到准时和稳定驾驶证的驾驶员。考虑到徽章在驾驶员参与者中是阵列类型的。字符串

query Q18 { description: "Select all drivers who has the following interests" statement: SELECT org.example.Driver WHERE (badges CONTAINS ['punctual', 'steady-driving']) }
相关文章
相关标签/搜索