Skip to main content

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,
}
}