get和filter是model API中两个重要的函数,用于根据给出的条件获取或过滤符合要求的实例。这些条件必须写在一个query表里面,query表类似如下形式:
filter返回一个query_set,即对象的一个特殊列表(此列表仍然可以调用Model的基本方法),而get仅仅返回一个(第一个)对象实例。
以下函数放在query表中使用。
相等判断
不相等判断
过滤出小于litmitation的部分
过滤出大于litmitation的部分
过滤出小于等于litmitation的部分
过滤出大于等于litmitation的部分
过滤出界于small和big之间(开区间,不含边界)的部分
过滤出界于small和big之间(闭区间,含边界)的部分
过滤出界于small和big之外(闭区间,含边界)的部分
过滤出在待检字段中包含substr字符串的实例
过滤出在待检字段中以substr字符串开头的实例
过滤出在待检字段中以substr字符串结尾的实例
过滤出待检字段在给定参数列表范围内的实例
过滤出待检字段不在给定参数列表范围内的实例
query参数表的与逻辑与或逻辑
query参数表的形式 model_obj:filter { x='a', y='b', z='c' },表中的各项之间是“与”逻辑的关系,用得最多的就是这种逻辑。但另一种逻辑——“或”逻辑,也是必不可少的。在bamboo中,目前还没实现一套完整的query逻辑表达式解释器,而是用了如下一种简单的方式来处理。
仅仅有这一点还只能处理一层逻辑关系,真正要做到高效处理(部分)多层逻辑关系,还得有下面的链式语法的支持
实现上述链式操作的基础在于query_set。query_set是一种特殊的对象列表,它虽然不是对象,却仍然可以调用Model的一些方法(需专门开放给query_set,针对query_set的情况做处理)。目前来讲,开放了filter和del两个函数给query_set用。
另一方面,query_set是List的实例,它仍然可以使用List类提供的各种方法。
model_obj:filter { foo=bar, x=lt(1000), timestamp=gt(100000) }
filter返回一个query_set,即对象的一个特殊列表(此列表仍然可以调用Model的基本方法),而get仅仅返回一个(第一个)对象实例。
以下函数放在query表中使用。
相等判断
eq (cmp_obj) 返回true,如果相等;否则,返回false
cmp_obj: 待比较的对象
不相等判断
uneq (cmp_obj) 返回true,如果不相等;否则,返回false
cmp_obj: 待比较的对象
过滤出小于litmitation的部分
lt (limitation) 返回true,如果检查的目标用于比较的字段值小于limitation;否则,返回false
limitation: 数值。上限
过滤出大于litmitation的部分
gt (limitation) 返回true,如果检查的目标用于比较的字段值大于limitation;否则,返回false
limitation: 数值。下限
过滤出小于等于litmitation的部分
le (limitation) 返回true,如果检查的目标用于比较的字段值小于等于limitation;否则,返回false
limitation: 数值。上限
过滤出大于等于litmitation的部分
ge (limitation) 返回true,如果检查的目标用于比较的字段值大于等于limitation;否则,返回false
limitation: 数值。下限
过滤出界于small和big之间(开区间,不含边界)的部分
bt (small, big) 返回true,如果检查的目标用于比较的字段值在区间内;否则,返回false
small: 区间左边界
big: 区间右边界
过滤出界于small和big之间(闭区间,含边界)的部分
be (small, big) 返回true,如果检查的目标用于比较的字段值在区间内;否则,返回false
small: 区间左边界
big: 区间右边界
过滤出界于small和big之外(闭区间,含边界)的部分
outside (small, big) 返回true,如果检查的目标用于比较的字段值在区间外;否则,返回false
small: 区间左边界
big: 区间右边界
过滤出在待检字段中包含substr字符串的实例
contains (substr) 返回true,如果substr在待检字段中;否则,返回false
substr: 用于检验的字符串
过滤出在待检字段中以substr字符串开头的实例
startsWith (substr) 返回true,如果待检字段以substr开头;否则,返回false
substr: 用于检验的字符串
过滤出在待检字段中以substr字符串结尾的实例
endsWith (substr) 返回true,如果待检字段以substr结尾;否则,返回false
substr: 用于检验的字符串
过滤出待检字段在给定参数列表范围内的实例
inset (...) 返回true,如果待检字段在参数列表内;否则,返回false
...: 一个参数列表,相互之间用逗号隔开
过滤出待检字段不在给定参数列表范围内的实例
uninset (...) 返回true,如果待检字段不在参数列表内;否则,返回false
...: 一个参数列表,相互之间用逗号隔开
query参数表的与逻辑与或逻辑
query参数表的形式 model_obj:filter { x='a', y='b', z='c' },表中的各项之间是“与”逻辑的关系,用得最多的就是这种逻辑。但另一种逻辑——“或”逻辑,也是必不可少的。在bamboo中,目前还没实现一套完整的query逻辑表达式解释器,而是用了如下一种简单的方式来处理。
与逻辑:model_obj:filter { x='a', y='b', z='c' } 或 model_obj:filter {'and', x='a', y='b', z='c' } query中的各参数是与逻辑的关系。即检查的实例必须满足所有的条件后才被取出
或逻辑:model_obj:filter {'or', x='a', y='b', z='c' } query中的各参数是或逻辑的关系。即检查的实例只要满足一个条件就被取出
仅仅有这一点还只能处理一层逻辑关系,真正要做到高效处理(部分)多层逻辑关系,还得有下面的链式语法的支持
model_obj:filter(.....):filter(....) 意思是在过滤出的结果里面继续过滤,直到得到想要的数据集合
实现上述链式操作的基础在于query_set。query_set是一种特殊的对象列表,它虽然不是对象,却仍然可以调用Model的一些方法(需专门开放给query_set,针对query_set的情况做处理)。目前来讲,开放了filter和del两个函数给query_set用。
另一方面,query_set是List的实例,它仍然可以使用List类提供的各种方法。