O
OOR
文档
OOR
文档
简介
Getting Started
安装
快速开始
Query Flow
Core Concepts
Suffix
Schema
Condition Tree
Adapters
SQLite
PostgreSQL / MySQL
Elasticsearch
Integrations
Drizzle Integration
ES Client

#Query Flow

学 oor 最简单的方式,是先记住这一条链路:

TypeScript
raw input -> schema -> node -> adapter

#1. raw input

TypeScript
const raw = {
  statusIn: ['active', 'pending'],
  createdAtDay: '2026-04-08',
  page: '1',
  size: '20'
}

这是最普通的请求参数对象。

#2. schema

TypeScript
import { schema } from 'oor'
import { z } from 'zod'

const query = schema({
  status: z.string(),
  createdAt: z.date()
})

const input = query.parse(raw)

这一层负责:

  • 校验字段是否合法
  • 校验 suffix 是否可用
  • 把字符串页码、日期等值归一化

#3. makeNode

TypeScript
import { makeNode } from 'oor'

const node = makeNode(input)

这一层把 query input 变成统一的条件树。

#4. 交给 adapter

#SQL

TypeScript
import { querySql } from 'oor/sqlite'

const sql = querySql(input, undefined, {
  map: {
    status: { column: 'status', type: 'string' },
    createdAt: { column: 'created_at', type: 'date' }
  }
})

#Elasticsearch

TypeScript
import { esBody } from 'oor/es'

const body = esBody(input, undefined, {
  map: {
    status: 'status.keyword',
    createdAt: 'created_at'
  }
})

#Drizzle

TypeScript
import { withTable } from 'oor/drizzle'

const userApi = withTable(db, users)
const list = await userApi.query(input)

#推荐顺序

对大多数项目,推荐这样理解:

  1. 先学 suffix
  2. 再学 schema
  3. 再学 condition
  4. 最后按场景选择 sqlite / pg / mysql / es / drizzle

#下一步

  • Suffix
  • Schema
  • Condition Tree
  • 1. raw input
  • 2. schema
  • 3. makeNode
  • 4. 交给 adapter
  • SQL
  • Elasticsearch
  • Drizzle
  • 推荐顺序
  • 下一步