Value for argument "dataOrField" is not a valid Firestore value. Cannot use "undefined" as a Firestore value

公開日時

Firestoreのドキュメントを更新する際に↓のようにundefinedなfiledを含むオブジェクトを渡したところ、

await firestore.collection(`customers`).doc(uid).update({
  someField: undefined,
})

以下のエラーが発生した。

Error: Update() requires either a single JavaScript object or an alternating list of field/value pairs that can be followed by an optional precondition.
Value for argument "dataOrField" is not a valid Firestore value.
Cannot use "undefined" as a Firestore value (found in field "someField").
If you want to ignore undefined values, enable `ignoreUndefinedProperties`.

undefinedはFirestoreの値には使えないが、オプションでundefinedを無視することもできるとのこと。

ということで、 firestore.settingsignoreUndefinedProperties を有効にした。

const firestore = admin.firestore()
firestore.settings({ ignoreUndefinedProperties: true })

これでundefinedなfiledは無視されてドキュメントが更新できるようになった。

参考


Related #firebase

YouTubeの「Firebase Release Notes」プレイリスト

最新のアップデートの概要を把握するのにちょうど良い

Firebase Extensions

Functionsを実装する際の参考になる

Cloud FunctionsでFirebase Authenticationの認証情報を取得する

functions.https.onCallを使用している場合はcontextパラメータを受け取ることができる

Nuxt.jsのservice workerで環境変数を切り替えられるようにする

設定情報をハードコードしたくなかったので、ビルド時にnodeコマンドでファイル生成を行い環境変数を切り替えられるように対応した。

CloudFunctionsを使ってFirestoreのサブコレクションを削除する

CloudFunctions内でFirebase CLIのdeleteコマンドを呼び出すことで一括削除ができる