データの追加
楽観的更新(optimistic updates)による高速でレスポンシブなユーザー体験。
transaction 内で実行される場合を除き、すべての insert と update は Promise を返し、これはサーバー上で mutation が適用されると resolve します。
mutation を適用する
insert と update はローカルで楽観的に適用され、クライアント上に即座に反映されます。その後、整合性がありクリーンなデータ状態を確保するために、変更内容が非同期でサーバーへ送信されます。
mutation には insert、delete、update の 3 種類があります。いずれも document reference に対して実行されます。
Insert
Insert は新しいドキュメントを作成するために使用します。
コレクションに新しいドキュメントを insert するには、DocumentReference に対して insert メソッドを呼び出し、
引数として新しいドキュメントデータを渡します。
try {
await squid.collection<User>('users').doc('new_user_id').insert({
name: 'John Doe',
email: 'johndoe@example.com',
});
console.log('User added successfully');
} catch (error) {
console.error(`Failed to add user ${error}`);
}
バックエンドの security rules により、各 mutation を誰が実行できるかを粒度細かく制御できます。これらのルールはパラメータとして MutationContext を受け取り、そこには mutation に関する必要な詳細がすべて含まれます。具体的には、変更前後のドキュメントの snapshot も含まれます。security rules について詳しく読み、どのように記述するかを理解してください。
Insert many
insertMany メソッドは、複数のドキュメントを一度に効率よく insert および/または update するために使用します。次の例では、新しいユーザードキュメントの配列を追加します。
const newDocuments = [
{
id: 'new_user_id1',
data: {
name: 'John Doe',
email: 'johndoe@example.com',
},
},
{
id: 'new_user_id2',
data: {
name: 'Jan Smith',
email: 'jansmith@example.com',
},
},
];
try {
await squid.collection<User>('users').insertMany(newDocuments);
console.log('Users added successfully');
} catch (error) {
console.error(`Failed to add users ${error}`);
}
Update
ドキュメントを update するには、DocumentReference に対して update メソッドを呼び出し、
引数として部分更新(partial update)データを含むオブジェクトを渡します。
try {
await squid.collection<User>('users').doc('existing_user_id').update({ email: 'new_email@example.com' });
console.log('User updated successfully');
} catch (error) {
console.error(`Failed to update user ${error}`);
}
Set in Path
DocumentReference に対して setInPath メソッドを呼び出し、プロパティへの path と新しい値を引数として渡すことで、ドキュメントの特定のプロパティのみを update することもできます。path ではドット記法を使ってネストされたプロパティを指定します。
const userRef = squid.collection<User>('users').doc('existing_user_id');
try {
await userRef.setInPath('address.street', 'Main');
console.log('Updated successfully');
} catch (error) {
console.error(`Failed to update user ${error}`);
}