firestore: arrayの中のmapの特定の要素を削除する
無効なFCMトークンを削除する処理を書こうとしたときに調べました。
https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array
import * as admin from 'firebase-admin'; // serviceAccountを取得 import { getInitializeAppOptions } from '../getInitializeAppOptions'; admin.initializeApp(getInitializeAppOptions()); const firestore = admin.firestore(); const docRef = firestore .collection('publics') .doc('map_delete_sample'); main(); async function setup() { await docRef.set({ tokens: [ { token: 'aaa', device: 'android' }, { token: 'bbb', device: 'apns' } ] }); } async function main() { await setup(); await docRef .update({ "tokens": admin.firestore.FieldValue.arrayRemove({ token: 'bbb', device: 'apns' }) }); console.log((await docRef.get()).data()); // { tokens: [ { token: 'aaa', device: 'android' } ] } } // ほかのサンプルコードと変数名とか衝突しないようにする export { }
オブジェクトそのもので比較することで削除対象を特定しているようです。