Firestore でフィールドを Object にしていて一部のプロパティだけを更新したいということはよくあると思います。個人的に一番楽でよく使っている方法をメモしておきます。もっといい方法があったら教えてください。
例えばこんな感じの Object を格納しているとします。そして、 hoge.piyo.fuga
の value のみを更新して、それ以外のプロパティは残したい。
hoge: {
piyo: {
fuga: 'example',
bar: 'bar text'
},
baz: 'foo'
}
以下の方法だと当然ですが意図したとおりになりません。
DB.collection('sample').doc(id).update({
hoge: {
piyo: {
fuga: 'updated'
}
}
})
こんな感じの Object になってしまいます。
hoge: {
piyo: {
fuga: 'example'
}
}
そこでドット区切りでプロパティの key を指定してあげます。 [`hoge.piyo.fuga`] このように key をドット区切りで繋げていって指定すれば OK です。
DB.collection('sample').doc(id).update({
//[`hoge.piyo.fuga`]: 'updated'
// なぜか Qiita のシンタックスハイライトで↑のコードを書くとエスケープで消えるのでコメントで表記
})
これはうまくいきます。
hoge: {
piyo: {
fuga: 'updated',
bar: 'bar text'
},
baz: 'foo'
}
ちなみに、通常の Object 表記とドット区切りのデータをコンバートするには dot-object という npm ライブラリを浸かると便利です。