Database Block
在工作流中直接操作项目的数据表,支持查询、统计、插入、更新和删除五种操作。
功能说明
Database Block 是一个数据节点,允许你在编辑器工作流中对项目的 Collection(数据表)执行 CRUD 操作。查询结果以变量形式输出,可被后续 Block 引用。所有数据输入都支持变量引用(ValueSource),可以动态使用上游 Block 的输出作为参数。
当你需要在工作流中读取数据库记录、写入新数据、更新已有记录、或删除数据时,使用 Database Block。前提是项目中已经创建了对应的 Collection(数据表)。
使用场景
- 数据驱动的 AI 生成:先查询数据库获取上下文信息,再将查询结果传给 Generation Block 生成内容
- 工作流自动化:根据 AI 生成的结构化数据自动插入或更新数据库记录
- 数据管道:查询 -> 处理 -> 回写,构建完整的数据处理流水线
配置参数
| 属性名 | 类型 | 说明 | 默认值 |
|---|---|---|---|
collectionId | string | 目标数据表 ID(从下拉列表选择) | '' |
operation | 'query' | 'count' | 'insert' | 'update' | 'delete' | 操作类型 | 'query' |
filtersJSON | string | 查询过滤条件(JSON 序列化的 DatabaseFilter[]) | '[]' |
sortJSON | string | 排序配置(JSON 序列化的 DatabaseSort) | '{}' |
pageSize | string | 每页条数,支持变量引用(JSON 序列化的 ValueSource) | ''(默认 20) |
insertDataJSON | string | 插入数据,字段到值的映射(JSON 序列化) | '{}' |
targetRowId | string | 更新/删除的目标行 ID,支持变量引用 | '' |
updateDataJSON | string | 更新数据,字段到值的映射(JSON 序列化) | '{}' |
deleteRowId | string | 删除的目标行 ID,支持变量引用 | '' |
confirmBeforeWrite | boolean | 写入前确认(预留功能,暂未生效) | false |
过滤运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
eq | 等于 | name = "张三" |
neq | 不等于 | status != "deleted" |
gt | 大于 | age > 18 |
gte | 大于等于 | score >= 60 |
lt | 小于 | price < 100 |
lte | 小于等于 | count <= 10 |
contains | 包含 | name 包含 "张" |
not_contains | 不包含 | email 不包含 "test" |
输出变量
输出变量根据操作类型不同而变化:
Query 操作
| 变量名 | 类型 | 说明 |
|---|---|---|
__default__ | array | 查询结果数组(同 rows) |
rows | array | 查询结果数组,每项包含 id、自定义字段、_created_at、_updated_at |
total | number | 表中总记录数(不受分页限制) |
Count 操作
| 变量名 | 类型 | 说明 |
|---|---|---|
__default__ | number | 记录总数 |
total | number | 记录总数 |
Insert 操作
| 变量名 | 类型 | 说明 |
|---|---|---|
__default__ | object | 新创建的记录对象 |
row | object | 新创建的记录,含 id、自定义字段、_created_at、_updated_at |
Update 操作
| 变量名 | 类型 | 说明 |
|---|---|---|
__default__ | object | 更新后的记录对象 |
row | object | 更新后的完整记录 |
Delete 操作
| 变量名 | 类型 | 说明 |
|---|---|---|
__default__ | boolean | true 表示删除成功 |
success | boolean | true 表示删除成功 |
deletedId | string | 被删除行的 UUID |
引用语法
{{database_0}} -- 默认输出(类型随操作不同)
{{database_0.rows}} -- 查询结果数组
{{database_0.rows.0.id}} -- 第一条记录的 ID
{{database_0.rows.0.name}} -- 第一条记录的 name 字段
{{database_0.total}} -- 记录总数
{{database_0.row}} -- 新建/更新后的记录
{{database_0.row.id}} -- 新建/更新记录的 ID
{{database_0.success}} -- 删除是否成功
{{database_0.deletedId}} -- 被删除行的 ID使用示例
示例 1:查询数据并遍历处理
查询所有用户记录,逐一生成个性化内容:
[Database Block: db_users] — 操作: Query, 表: users, 每页: 50
|
[Loop Block] — 遍历 {{db_users.rows}}
|
[Generation Block] — "为 {{item.name}} 生成欢迎邮件,邮箱: {{item.email}}"示例 2:查询 -> 判断 -> 插入
查询订单数量,超过阈值时插入告警记录:
[Database Block: order_count] — 操作: Count, 表: orders
|
[Condition Block] — 条件: {{order_count.total}} > 1000
├─ true:
│ └─ [Database Block: alert] — 操作: Insert, 表: alerts
│ 字段 message = "订单数超过 1000"
│ 字段 count = {{order_count.total}}
└─ false:
└─ (跳过)运行时约束
- 适用文档类型:所有文档类型(workflow、skill 均可使用)
- 可插入上下文:顶层文档、Condition 分支、Loop 内、Promise 分支
- 不可嵌套场景:无特殊限制
注意事项
- 必须先创建数据表:使用前需在项目的「数据库」页面中创建 Collection 并定义 Schema,否则配置面板中无法选择目标表
- 过滤条件在内存中执行:Query 操作先查询数据再在内存中过滤。大数据表建议合理设置 pageSize
- 单页查询:Query 当前只查询第 1 页,不支持自动翻页。需要遍历更多数据时,可结合 Loop Block 分页查询
- 分页上限:pageSize 最大为 100,最小为 1
- 软删除:Delete 操作是软删除(设置
deleted_at),数据不会被物理移除,可在数据库页面的回收站中恢复 - 排序限制:目前只能按系统字段(
created_at、updated_at)排序,自定义字段排序会降级为按创建时间排序 - 所有值输入支持变量引用:pageSize、targetRowId、deleteRowId 以及 Insert/Update 的每个字段值都可以引用上游 Block 的输出变量