在一些源平台的查询接口过滤条件不够丰富的情况下,condition 配置参数可以丰富数据过滤的方式。在源平台查询队列拉取到数据,准备写入到 mongoDB 之前这些查询条件会发挥作用。如果不满足条件他们将不会被写入到 mongoDB。

⚠️ ⚠️ ⚠️
查询条件仅在源平台配置中生效

基本使用方法

点开源平台配置的源码视图,可以在一级对象下面新增一个对象:condition
condition应该为一个数组,并且它的下级子成员也是一个数组
数组的逻辑关系如下图:
高级查询条件引擎 - 图1

过滤对象

一个基本的过滤对象应该至少包含三个部分:字段field、逻辑logic、值value
当需要处理子表或者表体字段时,字段可以书写成: items.name 的方式;
目前支持的 logic 运算符:

  • eq等于
  • neq不等于
  • gt大于 在日期大小判断时,需要转换为时间戳。在value前面增加timestamp
  • egt大于等于
  • lt小于
  • elt小于等于
  • like包含
  • notlike不包含
  • between范围,范围逻辑下你的 value 字段应该是: 100,500 使用逗号隔开书写两个值
  • notnull不为空 你可以不用输入 value
  • isnull为空 你可以不用输入 value

    表体严格模式 strictMode

    ⚠️ 在一些特殊的表体过滤中 还支持:strictMode 是否为严格模式

行号 货品编码 货品名称 数量 仓库 备注
1 AAA0001 电动剃须刀 1000 CK0001
2 BBB0001 磨牙棒 500 YY002
3 EEE0088 飞天茅台 88 MT0003
  1. {
  2. "field": "表体.仓库",
  3. "logic": "like",
  4. "value": "MT",
  5. "strictMode": true
  6. }

如果开启严格模式 strictMode=>true 该表中只有一行满足条件仍然会丢弃整张单据。
如果 strictMode=>false 关闭严格模式,那么系统会保留第三行数据,删除另外两行不满足条件的数据。

⚠️ ⚠️ ⚠️
strictMode 默认是不开启的

完整示例

  1. {
  2. "api": "purchasein.query",
  3. "type": "QUERY",
  4. "method": "POST",
  5. "number": "io_id",
  6. "id": "io_id",
  7. "condition": [
  8. [
  9. {
  10. "field": "io_id",
  11. "logic": "eq",
  12. "value": "816403"
  13. },
  14. {
  15. "field": "items.name",
  16. "logic": "like",
  17. "value": "活动",
  18. "strictMode": true
  19. }
  20. ],
  21. [
  22. {
  23. "field": "io_id",
  24. "logic": "like",
  25. "value": "512"
  26. }
  27. ],
  28. [
  29. {
  30. "field": "items.name",
  31. "logic": "eq",
  32. "value": "企鹅爸爸15合1桌游"
  33. }
  34. ]
  35. ],
  36. "more": "......"
  37. }

以上配置转译后可以理解为:

( ioid 等于 816403 并且 items.name 包含 活动|严格模式_ )
或者 ( io_id 包含 512)
或者 ( items.name 等于 企鹅爸爸15合1桌游)