`
daogangtang
  • 浏览: 61130 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

bamboo query & query_set API

Lua 
阅读更多
get和filter是model API中两个重要的函数,用于根据给出的条件获取或过滤符合要求的实例。这些条件必须写在一个query表里面,query表类似如下形式:
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类提供的各种方法。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics