快速开始
5 分钟学会使用 BucketDB 进行文档存储和查询。
安装
bash
bun add @bucket-db/core详见安装指南了解更多安装方式。
第一个应用
1. 定义文档类型
typescript
import type { Document } from '@bucket-db/core';
interface User extends Document {
name: string;
age: number;
email: string;
status: 'active' | 'inactive';
}所有文档都必须继承 Document 接口,它包含系统字段:
id- 自动生成的唯一标识_etag- ETag 用于乐观锁_createdAt- 创建时间_updatedAt- 最后更新时间
2. 创建数据库实例
typescript
import { BucketDB, FileSystemAdapter } from '@bucket-db/core';
const db = new BucketDB(
new FileSystemAdapter({ basePath: './my-database' }),
'my-app'
);参数说明:
- 第一个参数 - 存储适配器(这里使用本地文件系统)
- 第二个参数 - 数据库路径(用于隔离不同环境/租户)
3. 获取集合
typescript
const users = db.collection<User>('users');集合类似于传统数据库的表,用于组织同类文档。
4. 插入文档
typescript
const alice = await users.insert({
name: 'Alice',
age: 25,
email: 'alice@example.com',
status: 'active'
});
console.log(alice);
// {
// id: 'a1b2c3d4-...',
// name: 'Alice',
// age: 25,
// email: 'alice@example.com',
// status: 'active',
// _etag: 'etag-...',
// _createdAt: '2026-02-28T10:00:00.000Z',
// _updatedAt: '2026-02-28T10:00:00.000Z'
// }系统字段会自动添加到返回的文档中。
5. 查询文档
typescript
// 按 ID 查找
const user = await users.findById(alice.id);
// 等值查询
const activeUsers = await users.find({ status: 'active' });
// 比较查询
const adults = await users.find({ age: { $gte: 18 } });
// 组合查询
const results = await users.find({
status: 'active',
age: { $gte: 18, $lt: 65 }
});
// 分页查询
const page1 = await users.find({}, { limit: 10, offset: 0 });
const page2 = await users.find({}, { limit: 10, offset: 10 });详见查询语法了解所有操作符。
6. 更新文档
typescript
// 简单更新
const updated = await users.update(alice.id, {
age: 26
});
// 使用乐观锁
const updated = await users.update(
alice.id,
{ age: 26 },
{ etag: alice._etag }
);更新操作是部分更新,只修改指定的字段。
7. 删除文档
typescript
await users.delete(alice.id);完整示例
typescript
import { BucketDB, FileSystemAdapter } from '@bucket-db/core';
import type { Document } from '@bucket-db/core';
interface User extends Document {
name: string;
age: number;
email: string;
status: 'active' | 'inactive';
}
async function main() {
// 1. 创建数据库
const db = new BucketDB(
new FileSystemAdapter({ basePath: './my-database' }),
'my-app'
);
// 2. 获取集合
const users = db.collection<User>('users');
// 3. 插入文档
const alice = await users.insert({
name: 'Alice',
age: 25,
email: 'alice@example.com',
status: 'active'
});
const bob = await users.insert({
name: 'Bob',
age: 30,
email: 'bob@example.com',
status: 'active'
});
// 4. 查询文档
const activeUsers = await users.find({ status: 'active' });
console.log(`Active users: ${activeUsers.length}`);
const adults = await users.find({ age: { $gte: 25 } });
console.log(`Adults (25+): ${adults.length}`);
// 5. 更新文档
await users.update(alice.id, { age: 26 });
console.log('Updated Alice');
// 6. 删除文档
await users.delete(bob.id);
console.log('Deleted Bob');
// 7. 最终查询
const finalUsers = await users.find({});
console.log(`Final user count: ${finalUsers.length}`);
}
main().catch(console.error);