QueryType
Logicform中,对于筛选条件的表达的结构为一个QueryType。
QueryType会出现在两个地方,一个是和schema字段同级别的json object中。另外一个是出现在predItem中。在predItem中的query的介绍见这里
QueryType是由key-value对组成的。key为字段名称。value为筛选条件。整个query的结构参照mongodb的query开发,语法和mongodb的一致。以下是一些query的例子
{ qty: 5 }
{ qty: { $gt: 4, $lte: 20 } }
{ 类型: { $in: ["男装","女装"] } }
详细的query语法可以参考:mongodb query documentation
支持的操作符列表
目前支持的所有操作符如下:
- $eq/$ne: 等于/不等于
- $gt/$gte/$lt/$lte:大于/大于等于/小于/小于等于
- $in/$nin:在某个取值范围内/不在某个取值范围内
- $regex:符合某一个正则表达式
嵌套Logicform
query还支持嵌套logicform,语法如下:
{
qty: {
schema: 'sales',
operator: '$max',
pred: 'amount'
}
}
上面👆的queryType转化成SQL为:
qty = (SELECT max(amount) FROM sales)
特殊表达:时间
对于时间类型的筛选来说,一般是一个范围。一个标准的时间范围筛选条件表达如下(以2022年1月份为例):
{
日期: {
$gte: '2022-01-01 00:00:00',
$lte: '2022-01-31 23:59:59',
}
}
范围筛选有一个简化写法。例如想表达2022年1月,可以用一下简化法来代替
{
日期: {
year: 2022,
month: 1,
}
}
简化法的时间粒度支持以下几种:
- year
- quarter
- month
- week
- day
- hour
- minute
- second
简化法可以和标准表达合并,如:2021年2月20日~2022年3月1日:
{
日期: {
$gte: {
year: 2021,
month: 2,
day: 20,
},
$lte: {
year: 2022,
month: 3,
day: 1,
}
}
}
同时Logicform支持相对时间的表达。所谓相对时间,就是以下情况:
- 今年
- 去年
- 上个月
- etc...
相对时间的表达如下:
今年
{
日期: {
$offset: {
year: 0
}
}
}
去年
{
日期: {
$offset: {
year: -1
}
}
}
简化法可以和相对时间合并,如:去年10月份
{
日期: {
$offset: {
year: -1
},
month:10,
}
}