バックエンドとSDK

データベース(b77.db)

コレクション、クエリ、ユーザーごとのデータについて。

b77.db はスキーマ不要のドキュメント型データベースです。コレクションは、最初に書き込んだときに自動で作られます。

作成

const task = await b77.db.create('tasks', { title: 'Ship v2', done: false, priority: 2 });
// → { id, title, done, priority, createdAt, updatedAt, ownerId }

読み取り

const all = await b77.db.list('tasks');
const open = await b77.db.list('tasks', { where: { done: false }, sort: '-priority', limit: 50 });
const one = await b77.db.get('tasks', id);            // null if missing
const count = await b77.db.count('tasks', { where: { done: true } });

絞り込み

where はフィールドの完全一致で絞り込み、次の演算子も使えます。

演算子例
等しい{ status: 'paid' }
$ne{ status: { $ne: 'draft' } }
$in{ status: { $in: ['sent', 'paid'] } }
$gt / $gte / $lt / $lte{ total: { $gte: 100 } }
$contains{ name: { $contains: 'ann' } }(大文字と小文字を区別しない)

sort にはフィールド名を指定し、降順にするときは先頭に - を付けます(初期値は -createdAt)。limit は最大500で、offset でページ分けします。

更新と削除

await b77.db.update('tasks', id, { done: true });   // shallow merge
await b77.db.replace('tasks', id, { title: 'New' }); // overwrite all fields
await b77.db.remove('tasks', id);

ユーザーごとのデータ

ユーザーがログインしている間に作られたレコードには ownerId が付きます。mine: true を指定すると、今のユーザーのレコードだけを取得できます。

const myNotes = await b77.db.list('notes', { mine: true });

所有者のいるレコードは、その所有者しか更新や削除ができません。

アクセスルール

コレクションにはそれぞれアクセスルールがあり、サーバー側でチェックされます。ルールのないコレクションには、名前に応じた初期値が付きます。お客さんから送られてくるもの(orders、bookings、messages など)は submit、あなたが公開するコンテンツ(products、menu、posts など)は readonly、leaderboard と guestbook は append、それ以外はすべて private です。ルールはビルダーのデータタブでコレクションごとに変更できます。アプリ側で b77.config.json ファイルにルールを書いておくこともできます。

{ "rules": { "notes": "private", "menu": "readonly", "orders": "auth" } }
ルール読み取れる人書き込める人
public誰でも誰でも
authログインしているアプリのユーザーログインしているアプリのユーザー
private各ユーザーが自分のレコードだけレコードの所有者だけ
readonly誰でもデータタブからあなただけ
submitあなたとアプリの管理者だけ誰でも送信できる
append誰でも誰でも追加でき、変更や削除は自分のものだけ
members有効なサブスクリプションがあるログイン中のユーザー有効なサブスクリプションがあるログイン中のユーザー
members-private各購読者が自分のレコードだけレコードの所有者だけ
teamあなたと、あなたが管理者にしたユーザーあなたと、あなたが管理者にしたユーザー
direct送信者、受信者、アプリの管理者メッセージの変更や削除は送信者だけ

上限

レコード1件あたり64 KBまでです(ファイルは代わりに b77.storage.upload で保存します)。アプリ1つあたりのレコード数はプランによって異なり、Freeは2,000件、Starterは20,000件、Plusは50,000件、Proは100,000件、Eliteは200,000件です。