精通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']) }
相關文章
相關標籤/搜索