跳到主要内容

查询数据

初始化 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:查询选项配置

参数说明

参数类型必填说明
columnsstring要检索的列,用逗号分隔。返回时可以使用 customName:aliasName 重命名列
optionsobject查询选项配置

options 参数说明

参数类型必填说明
countstring计数算法,可选值:"exact" - 底层执行 COUNT(*)
headboolean设置为 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 表示内连接,只返回那些在关联表中存在匹配记录的数据。

相关文档

  • 过滤器 - 了解如何使用过滤条件
  • 修饰符 - 了解查询修饰符的使用方法