搜索和筛选
Feishub 提供了强大的搜索和筛选功能,让您能够精确地查找所需的记录。
基本搜索
简单搜索
typescript
// 搜索所有记录
const allRecords = await table.search();
if (allRecords?.items) {
console.log(`共找到 ${allRecords.items.length} 条记录`);
}
分页搜索
typescript
// 处理分页结果
let pageToken = "";
let allItems = [];
do {
const result = await table.search({
// 可以添加其他搜索条件
});
if (result?.items) {
allItems.push(...result.items);
}
pageToken = result?.page_token || "";
} while (result?.has_more);
console.log(`总共获取了 ${allItems.length} 条记录`);
条件筛选
单个条件
typescript
// 查找姓名等于"张三"的记录
const result = await table.search({
filter: {
conjunction: "and",
conditions: [
{
field_name: "姓名",
operator: "equal",
value: ["张三"]
}
]
}
});
多个条件 - AND 关系
typescript
// 查找年龄大于25且部门为"技术部"的记录
const result = await table.search({
filter: {
conjunction: "and",
conditions: [
{
field_name: "年龄",
operator: "isGreater",
value: [25]
},
{
field_name: "部门",
operator: "equal",
value: ["技术部"]
}
]
}
});
多个条件 - OR 关系
typescript
// 查找部门为"技术部"或"产品部"的记录
const result = await table.search({
filter: {
conjunction: "or",
conditions: [
{
field_name: "部门",
operator: "equal",
value: ["技术部"]
},
{
field_name: "部门",
operator: "equal",
value: ["产品部"]
}
]
}
});
操作符详解
文本操作符
typescript
// 等于
{
field_name: "姓名",
operator: "equal", // 或 "is"
value: ["张三"]
}
// 不等于
{
field_name: "姓名",
operator: "isNot",
value: ["张三"]
}
// 包含
{
field_name: "备注",
operator: "contains",
value: ["重要"]
}
// 不包含
{
field_name: "备注",
operator: "doesNotContain",
value: ["删除"]
}
// 为空
{
field_name: "备注",
operator: "isEmpty",
value: []
}
// 不为空
{
field_name: "备注",
operator: "isNotEmpty",
value: []
}
// 模糊匹配
{
field_name: "邮箱",
operator: "like",
value: ["%@company.com"]
}
数字操作符
typescript
// 大于
{
field_name: "年龄",
operator: "isGreater",
value: [25]
}
// 大于等于
{
field_name: "年龄",
operator: "isGreaterEqual",
value: [25]
}
// 小于
{
field_name: "年龄",
operator: "isLess",
value: [60]
}
// 小于等于
{
field_name: "年龄",
operator: "isLessEqual",
value: [60]
}
// 在范围内(使用多个条件组合)
{
conjunction: "and",
conditions: [
{
field_name: "年龄",
operator: "isGreaterEqual",
value: [25]
},
{
field_name: "年龄",
operator: "isLessEqual",
value: [60]
}
]
}
多选字段操作符
typescript
// 包含某个选项
{
field_name: "技能",
operator: "contains",
value: ["JavaScript"]
}
// 包含多个选项中的任意一个
{
field_name: "技能",
operator: "in",
value: ["JavaScript", "TypeScript", "React"]
}
排序
单字段排序
typescript
const result = await table.search({
sort: [
{
field_name: "年龄",
desc: true // 降序,false 为升序
}
]
});
多字段排序
typescript
// 先按部门升序,再按年龄降序
const result = await table.search({
sort: [
{
field_name: "部门",
desc: false
},
{
field_name: "年龄",
desc: true
}
]
});
复杂查询示例
查询活跃用户
typescript
// 查找最近30天登录过的25-40岁技术部员工
const activeUsers = await table.search({
filter: {
conjunction: "and",
conditions: [
{
field_name: "部门",
operator: "equal",
value: ["技术部"]
},
{
field_name: "年龄",
operator: "isGreaterEqual",
value: [25]
},
{
field_name: "年龄",
operator: "isLessEqual",
value: [40]
},
{
field_name: "最后登录时间",
operator: "isGreater",
value: [Date.now() - 30 * 24 * 60 * 60 * 1000] // 30天前
}
]
},
sort: [
{
field_name: "最后登录时间",
desc: true
}
]
});
查询高级用户
typescript
// 查找拥有特定技能组合的高级员工
const seniorDevelopers = await table.search({
filter: {
conjunction: "and",
conditions: [
{
field_name: "级别",
operator: "in",
value: ["高级工程师", "专家工程师", "技术总监"]
},
{
field_name: "技能",
operator: "contains",
value: ["架构设计"]
},
{
field_name: "工作年限",
operator: "isGreaterEqual",
value: [5]
}
]
}
});
性能优化建议
- 合理使用筛选条件:减少不必要的条件可以提高查询速度
- 适当的排序:只在需要时使用排序,避免对大量数据进行复杂排序
- 分页处理:对于大量数据,使用分页避免一次性加载过多记录
- 索引字段:在飞书中为常用的筛选字段创建索引