查询数据
初始化 SDK
import cloudbase from "@cloudbase/js-sdk";
const app = cloudbase.init({
env: "your-env-id", // 替换为您的环境id
});
const db = app.rdb();
// 或指定实例和数据库
// const db = app.rdb({
// instance: "<instance>",
// database: "<database>"
// });
基础查询
通过 select() 方法查询表数据,支持条件筛选、关联查询等功能。
db.from(tableName).select(columns, options)
- tableName:表名称
- columns:要检索的列,用逗号分隔
- options:查询选项配置
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| columns | string | 否 | 要检索的列,用逗号分隔。返回时可以使用 customName:aliasName 重命名列 |
| options | object | 否 | 查询选项配置 |
options 参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| count | string | 否 | 计数算法,可选值:"exact" - 底层执行 COUNT(*) |
| head | boolean | 否 | 设置为 true 时不返回数据,仅在需要计数时有用 |
代码示例
查询所有数据
// 查询 articles 表中的所有数据
const { data, error } = await db.from("articles").select();
console.log('查询结果:', data);
查询指定列
// 只查询文章的标题和创建时间
const { data, error } = await db.from("articles").select("title, created_at");
console.log('查询结果:', data);
返回结果
{
data: [
{
id: 1,
title: "文章标题",
created_at: "2023-01-01T00:00:00Z"
},
// ... 其他记录
],
error: null
}
关联表查询
通过关联查询可以同时获取多个表的数据,支持一对一、一对多等关联关系。
基础关联查询
// 查询文章数据,同时获取关联的分类信息
const { data, error } = await db.from("articles").select(`
title,
categories (
name
)
`);
console.log('查询结果:', data);
多重关联查询
// 查询文章,同时获取创建者和修改者的信息
const { data, error } = await db.from("articles").select(`
title,
created_by:users!articles_created_by_fkey(name),
updated_by:users!articles_updated_by_fkey(name)
`);
console.log('查询结果:', data);
💡 注意:当同一个表通过不同的外键关联多次时,需要使用外键约束名来区分不同的关联关系。
嵌套关联查询
// 查询分类及其下的所有文章,以及文章的作者信息
const { data, error } = await db.from("categories").select(`
name,
articles (
title,
users (
name
)
)
`);
console.log('查询结果:', data);
高级查询
条件过滤查询
// 查询特定分类下的所有文章
const { data, error } = await db
.from("articles")
.select("title, categories(*)")
.eq("categories.name", "技术文章");
console.log('查询结果:', data);
计数查询
// 获取每个分类及其包含的文章数量
const { data, error } = await db
.from("categories")
.select(`*, articles(count)`);
console.log('查询结果:', data);
仅获取总数
// 只获取文章总数,不返回具体数据
const { count, error } = await db
.from("articles")
.select("*", { count: "exact", head: true });
console.log('总数:', count);
内连接查询
// 只获取有分类的文章,使用内连接确保分类存在
const { data, error } = await db
.from("articles")
.select("title, categories!inner(name)")
.eq("categories.name", "教程")
.limit(10);
console.log('查询结果:', data);
💡 注意:
!inner表示内连接,只返回那些在关联表中存在匹配记录的数据。