Skip to main content

Filter

tip
  • 减少接口数量 - 提升开发效率
  • 增加业务灵活性 - 业务变化接口不变
  • Query - Source + Selector + Filter + Sort + Pagination
  • Condition == Filter

mongodb

QueryDesc
比较运算符
$eq匹配等于指定值的值。
$gt匹配大于指定值的值。
$gte匹配大于或等于指定值的值。
$in匹配数组中指定的任何值。
$lt匹配小于指定值的值。
$lte匹配小于或等于指定值的值。
$ne匹配不等于指定值的所有值。
$nin不匹配数组中指定的任何值。
逻辑运算符
$and使用逻辑 AND 连接查询子句,返回符合所有子句条件的文档。
$not反转查询表达式的效果,返回不符合查询表达式的文档。
$nor使用逻辑 NOR 连接查询子句,返回不符合所有子句条件的文档。
$or使用逻辑 OR 连接查询子句,返回符合任一子句条件的文档。
元素运算符
$exists匹配具有指定字段的文档。
$type选择字段类型为指定类型的文档。
评估运算符
$expr允许在查询语言中使用聚合表达式。
$jsonSchema根据给定的 JSON Schema 验证文档。
$mod对字段值进行模运算,并选择具有指定结果的文档。
$regex选择值匹配指定正则表达式的文档。
$text执行文本搜索。
$where匹配满足 JavaScript 表达式的文档。
地理空间
$geoIntersects选择与 GeoJSON 几何图形相交的几何图形。2dsphere 索引支持 $geoIntersects。
$geoWithin选择边界 GeoJSON 几何图形内的几何图形。2dsphere 和 2d 索引支持 $geoWithin。
$near返回接近某点的地理空间对象。需要地理空间索引。2dsphere 和 2d 索引支持 $near。
$nearSphere返回接近球面上某点的地理空间对象。需要地理空间索引。2dsphere 和 2d 索引支持 $nearSphere。
数组运算符
$all匹配包含查询中指定的所有元素的数组。
$elemMatch如果数组字段中的元素匹配所有指定的 $elemMatch 条件,则选择文档。
$size选择数组字段大小为指定值的文档。
位运算符
$bitsAllClear匹配一组位位置都为 0 的数字或二进制值。
$bitsAllSet匹配一组位位置都为 1 的数字或二进制值。
$bitsAnyClear匹配一组位位置中任何一位为 0 的数字或二进制值。
$bitsAnySet匹配一组位位置中任何一位为 1 的数字或二进制值。

mikro-orm

操作符SQL描述
比较
$eq=匹配等于指定值的值。
$gt>匹配大于指定值的值。
$gte>=匹配大于或等于指定值的值。
$inIN匹配数组中指定的任何值。
$lt<匹配小于指定值的值。
$lte<=匹配小于或等于指定值的值。
$ne<>匹配不等于指定值的所有值。
$ninNOT IN不匹配数组中指定的任何值。
$likeLIKE使用 LIKE 操作符。
$reREGEXP使用 REGEXP 操作符。
$fulltextFULL TEXT使用驱动特定的全文搜索功能。
$ilikeILIKE仅限 PostgreSQL。
$overlap&&仅限 PostgreSQL。
$contains@>仅限 PostgreSQL。
$contained<@仅限 PostgreSQL。
$hasKey?仅限 PostgreSQL。
$hasSomeKeys?|仅限 PostgreSQL。
$hasKeys?&仅限 PostgreSQL。
逻辑
$andAND用逻辑 AND 连接查询子句,返回符合两个子句条件的所有文档。
$notNOT反转查询表达式的效果,返回不符合查询表达式的文档。
$orOR用逻辑 OR 连接查询子句,返回符合任一子句条件的所有文档。
集合
$some= ANY查找至少有一条记录符合条件的集合。
$none<> ANY查找没有任何记录符合条件的集合。
$every查找所有记录均符合条件的集合。

hasura

  • 类似 mongo 的语法
  • 使用 _ 前缀 - $ 在 graphql 里表示变量
  • Equality - _eq, _neq
  • Greater than or less than - _gt, _lt, _gte, _lte
  • List based search - _in
  • Filter or check for null - _is_null
  • _not
  • _and, _or
  • Text - _like, _nlike, _ilike, _nilike, _similar, _nsimilar, _regex, _nregex, _iregex, _niregex
  • _cast - where:{ address: {_cast: {String: {_ilike: "%bengaluru%"}}} }
  • 参考

supabase

input BlogFilter {
nodeId: IDFilter
id: IntFilter
name: StringFilter
description: StringFilter
createdAt: DatetimeFilter
updatedAt: DatetimeFilter
and: [BlogFilter!]
or: [BlogFilter!]
not: BlogFilter
}

"""
查询数据的根类型
"""
type Query {
"""
可分页的`Blog`类型集合
"""
blogCollection(
"""
查询集合中的前`n`个记录
"""
first: Int

"""
查询集合中的后`n`个记录
"""
last: Int

"""
查询提供的游标之前的集合中的值
"""
before: Cursor

"""
查询提供的游标之后的集合中的值
"""
after: Cursor

"""
从游标后跳过n个值。游标分页的替代方案。不支持向后分页。
"""
offset: Int

"""
查询集合时应用到结果集的过滤器
"""
filter: BlogFilter

"""
应用到集合的排序顺序
"""
orderBy: [BlogOrderBy!]
): BlogConnection
}

FAQ

Condition vs Filter

  • Condition - 条件
    • 条件描述
    • 更广泛
    • if-then-else / switch-case
    • 逻辑判断、决策分支、程序逻辑、业务规则
    • 侧重于状态或业务逻辑
    • 强调 单个对象 自身状态或逻辑分支
  • Filter - 过滤器
    • 条件的一种具体用途
    • 对 Collection/集合 进行保留筛选 - 减少数据
    • 侧重于数据,用途明确
    • 多用于 API/RESTful/GraphQL