支援使用者指定過濾條件,篩選文檔。過濾運算式不是一個必選子句。
文法:filter:"運算式"
其中運算式左值 關係運算子 右值
左值:可以是一個屬性欄位或者是一個常量值(可以是數值或者string)
關係運算子:目前支援的邏輯運算有>、<、=、<=、>=、!=
右值:可以是一個屬性欄位或者是一個常量值(可以是數值或者string)
樣本:
filter:"price > 100" 表示篩選出價格大於100的文檔
filter:"ids=1" ids為一個多重值欄位,表示篩選出ids中包含1的文檔
filter:"province!=\"浙江\"" ,表示篩選出province不為浙江的文檔
查詢樣本
多個過濾條件組合
文法:filter:"條件 邏輯運算子 條件"
條件:是一個完整的關係運算運算式,比如 price > 100
邏輯運算子:AND、OR。AND表示兩邊條件都必須為TRUE,OR表示有一個為TRUE即可。也可以在子句中使用()
,括弧的優先順序最高。
樣本:
filter:"price > 100 AND categoryId=10",表示篩選出categoryId為10,且價格大於100的文檔
filter:"categoryId = 100 OR categoryId=10",表示篩選出categoryId為100或者10的文檔
filter:"(categoryId = 100 OR categoryId=10) AND price > 100",表示篩選出categoryId為100或者10且價格大於100的文檔
過濾時使用算術運算
文法:filter:"左值 算術運算子 右值 關係運算子 條件值"
左值:可以是一個屬性欄位或者是一個常量值(可以是數值或者string)
算術運算子:目前支援的邏輯運算有+、-、*、/
右值:可以是一個屬性欄位或者是一個常量值(可以是數值或者string)
條件值:可以是一個屬性欄位或者是一個常量值
樣本:
filter:"price*0.5 > 100",表示篩選出price打5折之後大於100的文檔
filter:"price-cost > 100",表示篩選出price減去cost大於100的文檔
filter:"(price*0.5 > 100) AND categoryId=10",表示篩選出price打5折之後大於100且categoryId為10的文檔
過濾時使用function函數
文法:filter:"function 關係運算子 右值"
說明:function為內建的function函數,比如in/notin等,更多的內建函數可以參考內建function函數。如果function函數的傳回值是bool型,那麼filter中可以不需要關係運算子。另外關係運算子的右邊也可以是一個function函數。
樣本:
filter:"in(id,"1|2|3")",表示篩選出id為1或者2或者3的文檔
其他function用法可參考下文中的內建function函數。
內建function函數
distance
distance:擷取兩個點之間的球面距離。一般用於LBS的距離計算。
舉例:
尋找距離使用者(120.34256,30.56982)10公裡內的商鋪(lon,lat為文檔中記錄商家的經緯度值,需要配置為屬性欄位):
filter:"distance(lon,lat,\"120.34256\",\"30.56982\")<10"
contain/notcontain
說明:
contain:判斷單值或多值a中是否包含b中描述的內容
notcontain:判斷單值或多值a中是否不在b中描述的內容
參數:
contain(a,b)
a:輸入為單值多值的int32/int64/string 類型
b:輸入為常量string運算式,用
|
分隔,表示滿足任意一項即可
notcontain(a,b)
a:輸入為單值多值的int32/int64/string 類型
b:輸入為常量string運算式,用
|
分隔,表示不滿足任意一項即可
傳回值:
contain(a,b)
:boolean類型返回,表示參數a是否包含參數b中描述的集合notcontain(a,b)
:boolean類型返回,表示參數a是否不在參數b中描述的集合
舉例:
使用contain
,檢索nid欄位值在[1,2,3]的所有記錄
filter:"contain(nid, \"1|2|3\")"
使用notcontain
,檢索nid欄位值不在[1,2,3]範圍內的所有記錄
filter:"notcontain(nid, \"1|2|3\")"
in/notin
in和notin: 判斷欄位值是否(不)在指定列表中
舉例:
查詢文檔中type(int類型)為1或2或3的文檔:
filter:"in(type, \"1|2|3\")"
查詢文檔中type(int32類型)不為1或2或3的文檔:
filter:"notin(type, \"1|2|3\")"
注意事項
float、double類型因為精度問題無法做精確相等的判斷,如有這種情境請改用>和<來實現。
string類型的欄位值,在filter運算式中必須要加雙引號,支援所有的關係運算,不支援算術運算。
string類型欄位的過濾僅支援=、!=運算,含義為等於、不等於,不支援>、<等關係運算。
多重值欄位使用=、!=時,其語義是多重值欄位只要包括filter的值即可。
運算式中的雙引號需要轉義。