こんにちは。virapture株式会社でCEOしながらラグナロク株式会社でもCKOとして働いている@mogmetです。
本日はfirestoreのtips投稿になります。
Map型のフィールド内にある配列に値を追加したい!
そんな要望ありませんか?私はありました。
たとえばチャットの未読を管理するためにchatRoomドキュメントのunreadMapフィールドに下記のようなデータを保管していたとします。
"unreadMap": {
"userIdA": [
"chatIdA"
],
"userIdB": [
"chatIdB"
]
}
ここにuserIdAの配列にchatIdCを追加しようとこう書くとします。
firestore.collection('chatRooms').doc('chatRoomIdA').update({
unreadMap: {
userIdA: admin.firestore.FieldValue.arrayUnion('chatIdC')
}
})
そうすると何が起こるかというと、userIdAの値しか残らなくなります!
"unreadMap": {
"userIdA": [
"chatIdC"
],
}
しかも前にあった値も上書きされて全然arrayUnionじゃないです。ただのupdate。
解決法
答えは下記で解説されていました。
mapの奥の値までkeyを指定すればよかったみたいです。
firestore.collection('chatRooms').doc('chatRoomIdA').update({
'unreadMap.userIdA': admin.firestore.FieldValue.arrayUnion('chatIdC')
})
これで無事arrayUnionできました。
まとめ
mapを使うときは.を使ったキーの指定でupdateしていきましょう。
最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!
他にもCameconやOffcha、問い合わせ対応が簡単にできるCSmart、フリーランスのコミュニティのNextFreelanceといったサービスも作ってるのでよかったら使ってね!
また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。
ラグナロクでもエンジニアやデザイナーのメンバーを募集しています!!楽しくぶち上げたい人はぜひお話ししましょう!!