filter子句
子句說明
過濾子句支持用戶根據(jù)過濾條件,篩選出用戶感興趣的文檔。過濾子句在通過query子句查找到的文檔進行進一步的過濾,以返回最終所需結(jié)果。過濾子句不是一個必選子句。
子句語法
{
"filter": ""
}
filter子句是一個可選子句,它的內(nèi)容是各種過濾條件組織成的邏輯表達式的字符串,例如a > 10 AND b < 100。詳細內(nèi)容請參考表達式語法 。
表達式語法
簡單過濾
左值 關(guān)系運算符 右值
左值:可以是一個屬性字段或者是一個常量值(可以是數(shù)值或者string)
關(guān)系運算符:目前支持的邏輯運算有>、<、=、<=、>=、!=
右值:可以是一個屬性字段或者是一個常量值(可以是數(shù)值或者string)
示例:
price > 100, 表示篩選出價格大于100的文檔
ids=1,ids為一個多值字段,表示篩選出ids中包含1的文檔
province != "浙江",表示篩選出province不為浙江的文檔
多個過濾條件組合
條件 邏輯運算符 條件
條件:是一個完整的關(guān)系運算表達式,比如 price > 100
邏輯運算符:AND、OR。AND表示兩邊條件都必須為TRUE,OR表示有一個為TRUE即可。也可以在子句中使用()
,括號的優(yōu)先級最高。
示例:
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的文檔
過濾時使用算術(shù)運算
filter=左值 算術(shù)運算符 右值 關(guān)系運算符 條件值
左值:可以是一個屬性字段或者是一個常量值(可以是數(shù)值或者string)
算術(shù)運算符:目前支持的邏輯運算有+、-、*、/
右值:可以是一個屬性字段或者是一個常量值(可以是數(shù)值或者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函數(shù)
function 關(guān)系運算符 右值
function為內(nèi)置的function函數(shù),比如in/notin等,更多的內(nèi)置函數(shù)可以參考內(nèi)置function函數(shù)。如果function函數(shù)的返回值是bool型,那么filter中可以不需要關(guān)系運算符。另外關(guān)系運算符的右邊也可以是一個function函數(shù)。
示例:
in(id,"1|2|3"),表示篩選出id為1或者2或者3的文檔
注意事項
在filter中出現(xiàn)的字段必須在定義應用結(jié)構(gòu)的時候配置為屬性字段;
float、double類型因為精度問題無法做精確相等的判斷,如有這種場景請改用>和<來實現(xiàn)。
string類型的字段值,在filter子句中必須要加雙引號,支持所有的關(guān)系運算,不支持算術(shù)運算。
string類型字段的過濾僅支持=、!=運算,含義為等于、不等于,不支持>、<等關(guān)系運算。
多值字段使用=、!=時,其語義是多值字段只要包括filter的值即可。
表達式中的雙引號需要轉(zhuǎn)義。