全部產品
Search
文件中心

:filter子句

更新時間:Sep 04, 2024

子句說明

過濾子句支援使用者根據過濾條件,篩選出使用者感興趣的文檔。過濾子句在通過query子句尋找到的文檔進行進一步的過濾,以返回最終所需結果。過濾子句不是一個必選子句。

子句文法

{
  "filter": ""
}

filter子句是一個可選子句,它的內容是各種過濾條件組織成的邏輯運算式的字串,例如a > 10 AND b < 100。詳細內容請參考運算式文法

運算式文法

簡單過濾

左值 關係運算子 右值

左值:可以是一個屬性欄位或者是一個常量值(可以是數值或者string)

關係運算子:目前支援的邏輯運算有>、<、=、<=、>=、!=

右值:可以是一個屬性欄位或者是一個常量值(可以是數值或者string)

樣本:

price > 100, 表示篩選出價格大於100的文檔
ids=1,ids為一個多重值欄位,表示篩選出ids中包含1的文檔
province != "浙江",表示篩選出province不為浙江的文檔

多個過濾條件組合

條件 邏輯運算子 條件

條件:是一個完整的關係運算運算式,比如 price > 100

邏輯運算子:AND、OR。AND表示兩邊條件都必須為TRUE,OR表示有一個為TRUE即可。也可以在子句中使用(),括弧的優先順序最高。

樣本:

price > 100 AND categoryId=10,表示篩選出categoryId為10,且價格大於100的文檔
categoryId = 100 OR categoryId=10,表示篩選出categoryId為100或者10的文檔
(categoryId = 100 OR categoryId=10) AND price > 100,表示篩選出categoryId為100或者10且價格大於100的文檔

過濾時使用算術運算

filter=左值 算術運算子 右值 關係運算子 條件值

左值:可以是一個屬性欄位或者是一個常量值(可以是數值或者string)

算術運算子:目前支援的邏輯運算有+、-、*、/

右值:可以是一個屬性欄位或者是一個常量值(可以是數值或者string)

條件值:可以是一個屬性欄位或者是一個常量值

樣本:

price*0.5 > 100,表示篩選出price打5折之後大於100的文檔
price-cost > 100,表示篩選出price減去cost大於100的文檔
(price*0.5 > 100) AND categoryId=10,表示篩選出price打5折之後大於100且categoryId為10的文檔

過濾時使用function函數

function 關係運算子 右值

function為內建的function函數,比如in/notin等,更多的內建函數可以參考內建function函數。如果function函數的傳回值是bool型,那麼filter中可以不需要關係運算子。另外關係運算子的右邊也可以是一個function函數。

樣本:

in(id,"1|2|3"),表示篩選出id為1或者2或者3的文檔

注意事項

  • 在filter中出現的欄位必須在定義應用結構的時候配置為屬性欄位;

  • float、double類型因為精度問題無法做精確相等的判斷,如有這種情境請改用>和<來實現。

  • string類型的欄位值,在filter子句中必須要加雙引號,支援所有的關係運算,不支援算術運算。

  • string類型欄位的過濾僅支援=、!=運算,含義為等於、不等於,不支援>、<等關係運算。

  • 多重值欄位使用=、!=時,其語義是多重值欄位只要包括filter的值即可。

  • 運算式中的雙引號需要轉義。