コレクション参照
コレクション参照を使用すると、データベース内のドキュメントのコレクション(NoSQL)またはテーブル(SQL)にアクセスできます。
コレクション参照を使う理由
データを読み取り、書き込み、クエリするための起点が必要です。コレクション参照は、クライアントコードを特定のコレクションまたはテーブルに接続し、単一のエントリポイントを通じてすべてのデータベース操作に型安全にアクセスできるようにします。
// One line to connect to your data
const users = squid.collection<User>('users');
// Then query, insert, delete, or join
const activeUsers = await users.query().eq('status', 'active').snapshot();
コレクションの基本
コレクション参照は、データベース内の特定のコレクションまたはテーブルを指す「型付きポインタ」です。Squid Client SDK におけるすべてのデータ操作の出発点として機能します。
コレクション参照を作成するには、squid オブジェクトに対して collection メソッドを呼び出し、コレクション名と、型安全のための任意のジェネリック型パラメータを渡します。
const usersCollection = squid.collection<User>('users');
外部データベースのテーブルにアクセスするには、2つ目の引数として connector ID を渡します。connector ID は Squid Console の connectors section で確認できます。
const usersCollection = squid.collection<User>('users', 'YOUR_CONNECTOR_ID');
ジェネリック型付け
コレクション参照は、コレクション内のドキュメントの形(shape)を表すジェネリック型パラメータ T を受け取ります。これにより、すべての操作に対してコンパイル時の型安全性が提供されます。
interface Product {
id: string;
name: string;
price: number;
inStock: boolean;
}
// Type-safe: field names and values are checked at compile time
const products = squid.collection<Product>('products');
参照 ID
各コレクション参照インスタンスには、それを識別する一意の refId プロパティがあります。
usersCollection.refId; // Unique identifier string
クイックスタート
ステップ 1: データ型を定義する
interface User {
id: string;
name: string;
email: string;
age: number;
}
ステップ 2: コレクション参照を作成する
const usersCollection = squid.collection<User>('users');
ステップ 3: クエリしてデータを利用する
// Get a snapshot of all users
const users = await usersCollection.query().snapshot();
// Access data from each document reference
for (const userRef of users) {
console.log(userRef.data.name, userRef.data.email);
}
利用可能な操作
コレクション参照を取得したら、それを使ってドキュメントへアクセスし、クエリを構築し、バルク操作を実行できます。
| 操作 | メソッド | 詳細 |
|---|---|---|
| ドキュメント参照を取得する | collection.doc(id) | ドキュメント参照, Document IDs |
| ドキュメントをクエリする | collection.query() | クエリ |
| コレクション間で join する | collection.joinQuery() | コレクションとコネクタをまたいだデータの join |
| OR でクエリを組み合わせる | collection.or(query1, query2) | OR クエリ |
| 複数ドキュメントを insert する | collection.insertMany() | データの追加 |
| 複数ドキュメントを削除する | collection.deleteMany() | データの削除 |
| 特定フィールドを投影する | query.projectFields() | フィールド投影 |
エラーハンドリング
| エラー | 原因 | 解決策 |
|---|---|---|
| Collection not found | コレクション名が、既存のコレクションまたはテーブルのいずれとも一致しない | Squid Console でコレクション名を確認してください |
| Invalid connector ID | 2つ目の引数として渡した connector ID が存在しない | Squid Console の connectors section で connector ID を確認してください |
| Type mismatch at runtime | ジェネリック型パラメータが実際のドキュメントの shape と一致しない | TypeScript の interface がコレクションのスキーマと一致していることを確認してください |
ベストプラクティス
-
常にジェネリック型パラメータを使用することで、すべての操作でコンパイル時の型安全性を得られます。
Client code// Recommended: typed collection
const users = squid.collection<User>('users');
// Avoid: untyped collection loses type checking on queries and mutations
const users = squid.collection('users'); -
操作ごとに新しく作成するのではなく、コンポーネントやモジュール内でコレクション参照を再利用してください。
-
connector ID を定数に保存して、タイプミスを防ぎ、connector の変更を簡単にします。
Client codeconst POSTGRES_CONNECTOR = 'my_postgres_connector';
const orders = squid.collection<Order>('orders', POSTGRES_CONNECTOR);